【发布时间】:2014-02-06 19:17:02
【问题描述】:
如何在我的视图中从 web api 获取 url?
示例(来自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) { ... }
}
现在我想在我的视图中构造“/reviews/edit”,我该怎么做?
我尝试过创建一个小扩展方法,但它要求我为每条路由指定一个实际的“RouteName”。有没有我可以使用的方法(比如在 MVC 中),我可以只传递控制器和操作?
@Url.Action("Edit", "Reviews)
我现在使用的方法(使用 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);
}
编辑
当我使用Url.RouteUrl(new { controller = ..., action = ...}) 之类的方法时,它会直接重定向到该操作(例如new { controller = "Reviews", action = "Show"} --> /reviews/show,而我希望它重定向到/reviews/...
【问题讨论】:
-
看起来有些混乱...您正在尝试生成指向 MVC 操作而不是 Web API 的链接。
httproute用于生成指向 Web API 控制器的链接,而不是像您的情况那样的 MVC。 -
这是一个错误的复制/粘贴,它绝对是一个 Web API 控制器,而不是一个 MVC 控制器,感谢您指出这一点
标签: c# asp.net-mvc asp.net-web-api attributerouting