构造URL鉴于与属性的路由网页API [英] Construct url in view for Web Api with attribute routing

查看:145
本文介绍了构造URL鉴于与属性的路由网页API的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我怎样才能从网页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/editto 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆