在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. 如何在PHP创建Web API服务
- 6. 如何在asp.net MVC4中为web api创建常用方法
- 7. ASP.NET Web API:如何跨请求创建持久集合?
- 8. Web API创建API密钥
- 9. 如何为ASP.NET MVC3创建Web服务
- 10. 如何从ASP.Net web创建PDF表格
- 11. 如何处理ASP.NET Web API
- 12. 如何创建这些URL
- 13. 如何从Asp.net web api应用程序中使用web api
- 14. 如何创建我自己的Web API/Web服务
- 15. ASP.NET如何在ASP.NET中创建一个虚荣URL?
- 16. 如何创建API
- 17. 在ASP.NET中创建友好的URL
- 18. 如何创建在asp.net MVC3
- 19. 关于如何创建一个mysql web服务/ api的建议
- 20. Rreading asp.net web api
- 21. 如何从web api url获取图片?
- 22. 如何在asp.net中创建RESTful Web服务?
- 23. 如何创建ASP.NET websocket .ashx文件的URL?
- 24. ASP.NET Web API返回代码404与新创建的ApiController
- 25. 为ASP.Net Web API创建控制器时出现错误
- 26. 如何在asp.net web应用程序中创建webshare?
- 27. Web API URL理解
- 28. 构建ASP.Net Web API RESTful服务
- 29. 如何将angularjs与asp.net web api集成
- 30. 如何禁用ASP.NET Web API的动词
这真的没有多大帮助,因为我需要我的视图才能够以安全的方式生成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