2016-09-30 45 views
0

這裏是我的樣例代碼爲如何使用Web API網址跨越MVC應用程序

function AuthenticateLogin() { 
      $.getJSON('http://localhost:52293/api/APILogin/', function (data) { 
       if (data != null) { 

       } 
      } 
      ); 
     } 

託管URL是以下,這將在整個MVC應用程序中使用,可能是控制器/動作將在整個應用程序中變化。

http://localhost:52293

例如,在這裏,我硬編碼上面的網址在任何地方,如果我移動應用到其他機器,那麼它是不是好再次更改URL中每一個地方。那麼,有什麼辦法可以解決這個問題嗎?

+0

結帳出來UrlHelper.HttpRouteUrl(字符串對象) – Nkosi

回答

2

給你的API的行動靜態名稱:

[RoutePrefix("api/APILogin")] 
public class APILoginApiController { 
    [Route("", Name = "Login")] 
    public ActionResult Login(string userName) { 
     // ... 
    } 
} 

然後在你的剃鬚刀JavaScript,您可以通過調用Url.HttpRouteUrl動態構建您的網址爲您利用UrlHelper。

$.getJSON('@Url.HttpRouteUrl("Login", new {})', function (data) { 
    // ... 
}); 

這種方法的優點是,如果要變更路線是如何制定任何東西,它是在行動上的[Route]屬性。如此匹配名稱將使用路由引擎始終創建正確的路徑。否則,你仍然堅持在整個JavaScript中使用(部分)硬編碼路徑。

如果您的路線需要任何變量,那麼在空匿名對象中提供該路由作爲HttpRouteUrl()的第二個參數。

+0

它說,該路由模板不能以「/」或>「〜」字符開始,它不能續ain'?'人物 –

+0

對不起,我沒有在我面前檢查部分。只需要以「api」開頭。我會解決答案。 – krillgar

+0

@krillgar我修好了。 – Nkosi

2

你不應該像這樣硬編碼完整的絕對url。您可以考慮使用相對網址。要生成相對URL,您可以考慮使用Url幫助程序方法

如果您的代碼位於外部js文件中,則應考慮使用helper方法在剃鬚刀視圖中生成相對url並將其存儲一個js變量,你可以在你的外部js文件中使用。

在您的Razor視圖

<script> 
    var myApp = myApp || {}; 
    myApp.siteBaseUrl = "@Url.Content("~")"; // Get the app root 
</script> 

現在在外部JS文件

$.getJSON(myApp.siteBaseUrl+'api/APILogin/', function (data) { 
    // do something 
}); 

您還可以使用Url.RouteUrl輔助方法來生成的網址到API端點。例如

var myApp = myApp || {};  
myApp.productsApiUrl = "@Url.RouteUrl("DefaultApi", 
             new { httproute = true, controller = "Products"})"; 

現在別的地方在JS codde,你可以使用它像

$.getJSON(myApp.productsApiUrl , function (data) { 
    // do something with products data 
}); 

這種方法允許你傳遞路徑的值,當你撥打電話和輔助方法將建立網址你(基於路由定義)

myApp.productsDetailsUrl = "@Url.RouteUrl("DefaultApi", 
           new { httproute = true, controller = "Products", id= 210 })"; 
相關問題