构造URL鉴于与属性的路由网页API [英] Construct url in view for Web Api with attribute routing
问题描述
我怎样才能从网页API的网址,我认为?
How can I get the url from web api in my view?
示例(从的 MSDN-博客):
[RoutePrefix("reviews")]
public class ReviewsController : ApiController
{
// eg.: /reviews
[Route]
public IHttpActionResult Get() { ... }
// eg.: /reviews/5
[Route("{reviewId}")]
public IHttpActionResult Show(int reviewId) { ... }
// eg.: /reviews/5/edit
[Route("{reviewId}/edit")]
public IHttpActionResult Edit(int reviewId) { ... }
}
现在我要建构在我看来/评论/编辑,我该怎么做呢?
Now I want to construct "/reviews/edit" in my view, how can I do this?
我试图创建一个小的扩展方法,但它需要我给每条路由的实际RouteName。有没有我可以(在MVC等)使用,我可以只通过控制器和行动的方法?
I've tried creating a little extension method, but it requires me to give every route an actual "RouteName". Is there a method I can use (like in MVC) where I can just pass the controller and action?
@Url.Action("Edit", "Reviews)
现在我使用(与RouteName)该方法还不允许我使用整数作为参数(除非我传递一个默认值)。如果我需要命名我所有的路线,我怎样才能创建一个路由URL,但传中的数据我的要求-portion?我的参数
The method I'm using now (with RouteName) also doesn't allow me to use integers as parameters (unless I pass a default value). If I do need to name all my routes, how can I create a route url, but pass my parameters in the "data"-portion of my request?
目前的方法:
public static string ResolveWebApiRoute(this UrlHelper urlHelper, string routeName, object routeValues = null)
{
var newRouteValues = new RouteValueDictionary(routeValues);
newRouteValues.Add("httproute", true);
return urlHelper.RouteUrl(routeName, newRouteValues);
}
修改
当我用像 Url.RouteUrl(新{控制器= ... =行动...})
,它直接重定向到该操作方法(如新{控制器=评论,行动=显示} - > /评论/节目
,whilest我希望它重定向到 /评论/...
When I used methods like Url.RouteUrl(new { controller = ..., action = ...})
, It redirects directly to that action (e.g. new { controller = "Reviews", action = "Show"} --> /reviews/show
, whilest I want it to redirect to /reviews/...
推荐答案
生成链接到网页API的路线总是需要一个 RouteName
,所以你应该有类似如下:
Generating links to Web API routes always require a RouteName
, so you should have something like below:
[Route("{reviewId}/edit", Name="EditView")]
public IHttpActionResult Edit(int reviewId) { ... }
您可以生成像 /链接点评/ 1 /编辑
来的Web API。
You can then generate a link like /reviews/1/edit
to Web API.
Url.RouteUrl(routeName: "EditView", routeValues: new { httpRoute = true, reviewId = 1 });
或
Url.HttpRouteUrl(routeName: "EditView", routeValues: , reviewId = 1)
请注意这条路线名称必须显式地指定他们不再自动生成像什么@Karhgath是在暗示。这是从RC到RTM版本所做的更改。
Note that route names need to be specified explicitly and they are no longer generated automatically like what @Karhgath is suggesting. This was a change made from RC to RTM version.
这篇关于构造URL鉴于与属性的路由网页API的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!