Tea*_*oKi 9 c# asp.net-mvc asp.net-web-api attributerouting
如何在我看来从web api获取网址?
示例(来自msdn-blog):
[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) { ... }
}
Run Code Online (Sandbox Code Playgroud)
现在我想在我的视图中构建"/ reviews/edit",我该怎么做?
我尝试创建一个小扩展方法,但它要求我给每个路由一个实际的"RouteName".有没有我可以使用的方法(比如在MVC中)我可以通过控制器和动作?
@Url.Action("Edit", "Reviews)
Run Code Online (Sandbox Code Playgroud)
我现在使用的方法(使用RouteName)也不允许我使用整数作为参数(除非我传递一个默认值).如果我确实需要命名我的所有路由,我如何创建路由URL,但是在我的请求的"数据"部分中传递我的参数?
目前的方法:
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);
}
Run Code Online (Sandbox Code Playgroud)
编辑
当我使用类似的方法时Url.RouteUrl(new { controller = ..., action = ...}),它会直接重定向到该动作(例如new { controller = "Reviews", action = "Show"} --> /reviews/show,我希望它重定向到/reviews/...
Kir*_*lla 21
生成Web API路由的链接总是需要a RouteName,所以你应该有类似下面的内容:
[Route("{reviewId}/edit", Name="EditView")]
public IHttpActionResult Edit(int reviewId) { ... }
Run Code Online (Sandbox Code Playgroud)
然后,您可以生成类似于/reviews/1/editWeb API 的链接.
Url.RouteUrl(routeName: "EditView", routeValues: new { httpRoute = true, reviewId = 1 });
Run Code Online (Sandbox Code Playgroud)
要么
Url.HttpRouteUrl(routeName: "EditView", routeValues: , reviewId = 1)
Run Code Online (Sandbox Code Playgroud)
请注意,需要明确指定路径名称,并且不再像@Karhgath建议的那样自动生成路径名称.这是从RC到RTM版本的更改.