9

ビューで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/...

4

3 に答える 3

21

Web API ルートへのリンクを生成するには常に が必要なためRouteName、次のようなものが必要です。

[Route("{reviewId}/edit", Name="EditView")]
public IHttpActionResult Edit(int reviewId) { ... }

/reviews/1/edit次に、 Web APIのようなリンクを生成できます。

Url.RouteUrl(routeName: "EditView", routeValues: new { httpRoute = true, reviewId = 1 });

また

Url.HttpRouteUrl(routeName: "EditView", routeValues: , reviewId = 1)

ルート名は明示的に指定する必要があり、@Karhgath が提案しているように自動的に生成されないことに注意してください。これは RC 版から RTM 版への変更です。

于 2014-01-20T16:01:30.917 に答える
4

ルート属性を使用すると、次のようなものを使用して、MVC ビューから WebApi2 コントローラーのルートを取得できました。

Url.HttpRouteUrl("RouteName", new { })
于 2016-01-12T17:28:40.450 に答える