在ASP.NET MVC中,我們有@Url.Action
的操作。是否有類似@Url.Api
的路由到/ api/controller?如何創建ASP.NET Web API Url?
回答
ApiController有一個名爲Url的屬性,它的類型爲System.Web.Http.Routing.UrlHelper,它允許您爲api控制器構建url。
例子:
public class ValuesController : ApiController
{
// GET /api/values
public IEnumerable<string> Get()
{
// returns /api/values/123
string url = Url.Route("DefaultApi", new { controller = "values", id = "123" });
return new string[] { "value1", "value2" };
}
// GET /api/values/5
public string Get(int id)
{
return "value";
}
...
}
這UrlHelper不存在既不是你的意見,也沒有在標準控制器。
UPDATE:
而且爲了做一個ApiController的路由外,你可以做到以下幾點:
public class HomeController : Controller
{
public ActionResult Index()
{
string url = Url.RouteUrl(
"DefaultApi",
new { httproute = "", controller = "values", id = "123" }
);
return View();
}
}
或視圖中:
<script type="text/javascript">
var url = '@Url.RouteUrl("DefaultApi", new { httproute = "", controller = "values", id = "123" })';
$.ajax({
url: url,
type: 'GET',
success: function(result) {
// ...
}
});
</script>
注意的httproute = ""
路由令牌很重要。
顯然,這假設您的API路線在Global.asax
叫你的RegisterRoutes方法DefaultApi
:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
它的工作原理與Url.Action
簡單的形式,所以你不必引用任何路由名稱:
Url.Action("ActionName", "ControllerName", new { httproute = "DefaultApi" })
如果在區域內需要URL,您可能需要添加area = ""
。 (Api控制器在默認情況下在區域之外)我使用的是MVC 4.
Web Api中的UrlHelper是http:// msdn。microsoft.com/en-us/library/system.web.http.routing.urlhelper(v=vs.108).aspx,它沒有操作方法。 – 2013-09-20 15:26:18
@YuriyFaktorovich這篇文章暗示'Url.Action'正在使用從一個視圖。 'Url'的類型是'System.Web.Mvc.UrlHelper',它不映射到'WebApi'路由。這就是爲什麼你需要額外的參數:'new {httproute =「」}'。 – Jesse 2013-09-24 21:26:57
我已添加'httproute「」''但它不是映射=/ – Maslow 2013-11-08 20:25:59
希望能夠以類型安全的方式生成鏈接,而不使用硬編碼的字符串(控制器名稱)?
這裏有一個nuget!(和它是由馬克·西曼書面)
https://github.com/ploeh/Hyprlinkr
是這樣工作的:
路線,像往常一樣:
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
獲取一個URL:
var linker = new RouteLinker(request);
var uri = linker.GetUri<FooController>(r => r.GetById(1337));
結果:
http://localhost/api/foo/1337
這裏是回答這個問題的KISS方法:
如果是這樣,你會用它來創建一個MVC控制器URL
@Url.Action("Edit", "MyController")
爲了得到一個URL的API代碼控制器的版本(假設你使用相同的控制器名稱),你可以使用
@Url.Action("Edit", "api/MyController")
所有Url.Action方法做的是附加的應用程序的根路徑,與C控制器名稱,後跟動作名稱(除非它是「索引」,在這種情況下它不會被追加。如果路由值對象具有id屬性,則該值也會附加到該URL。
- 1. 在ASP.NET中創建Web API
- 2. 如何創建ASP.NET Web場?
- 3. ASP.NET Web Api url設計
- 4. 如何在ASP.NET中創建Web爬蟲?
- 5. 創建自託管的Web API或使用Asp.Net核心Web API?
- 6. 如何創建跨域asp.net web服務
- 7. 如何創建web api方法?
- 8. 如何在PHP創建Web API服務
- 9. 如何在Asp.net MVC Web Api中創建Ror樣式Restful路由
- 10. 如何爲ASP.NET 4.5的Web API創建MultipartFormFormatter
- 11. 如何在asp.net MVC4中爲web api創建常用方法
- 12. ASP.NET Web API:如何跨請求創建持久集合?
- 13. 如何通過Parse.com創建Web Hook URL?
- 14. 如何創建asp.net web安裝項目
- 15. 如何從ASP.Net web創建PDF表格
- 16. 如何爲ASP.NET MVC3創建Web服務
- 17. 如何在asp.net中創建分層url?
- 18. Web API創建API密鑰
- 19. 在ASP.Net中創建REST API
- 20. 如何處理ASP.NET Web API
- 21. ASP.NET Web API,Web服務發現和客戶端創建
- 22. C#Asp.net Web API - 創建JSON/XML轉換器API
- 23. 如何創建這些URL
- 24. ASP.NET MVC Web API 4 - Complexe URL模板
- 25. 調用POST作爲URL ASP.NET web api
- 26. 如何從Asp.net web api應用程序中使用web api
- 27. ASP.NET Web API不能從遠程服務創建json數據
- 28. 如何在Asp.net MVC 4中創建Web鉤子處理程序?
- 29. 如何通過Asp.Net Web API角路由
- 30. ASP.NET如何在ASP.NET中創建一個虛榮URL?
這真的沒有多大幫助,因爲我需要我的視圖才能夠以安全的方式生成Url。如果存在Go Live許可證,那麼在視圖上創建網址的「Go Live」方式是什麼? – 2012-02-29 16:16:45
更重要的是,如果您使用ASP.Net Development Server,這將無法正常工作,因爲它始終更改端口,因此您甚至無法在視圖中強制該URL。 – 2012-02-29 16:18:35
@ShaneCourtrille,我已經更新了我的答案,以說明如何使用普通的'System.Web.Mvc.UrlHelper'來生成HttpControllerContext之外的Api路由。 – 2012-02-29 16:39:30