web-dev-qa-db-ja.com

ASP.NET Web APIは、Url.Actionを使用してURLを生成します

Web Apiで同じURLを生成するにはどうすればよいですか?

var url = Url.Action("Action", "Controller", new { product = product.Id, price = price }, protocol: Request.Url.Scheme);

追伸.

URLは、Web API内からMVCコントローラー/アクションに対して生成される必要があります。

したがって、基本的には、私のapi/generateurlそして、それはにURLを返します:

http://domain.com/controller/action?product=productId&price=100
34
David Dury

Web Api ControllerのUrl.Actionに最も近いヘルパーは、ルート名、コントローラー名、アクション名、ルートパラメーター(必要な場合)によってURLを生成するUrl.Linkメソッドです。

簡単な例を示します

デフォルトのApp_start/RouteConfig.cs

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

Web Apiコントローラー:

public class MyWebApiController : ApiController
{
    public string Get()
    {
        var url = this.Url.Link("Default", new { Controller = "MyMvc", Action = "MyAction", param1 = 1, param2 = "somestring" });
        return url;
    }
}

MVCコントローラー

public class MyMvcController : Controller
{
    public ActionResult MyAction(int param1, string param2)
    {
        // ...
    }
}

WebApiコントローラーによって生成されるURLはhttp://myDomain/MyMvc/MyAction?param1=1&param2=somestring

プロトコル/ URLスキーマを渡す方法を見つけられませんでしたが、それは単なる文字列であり、プロトコルがどうあるべきかを知っていれば、それを操作できます。

お役に立てれば。

編集:

これは、プロトコル部分に役立つ場合があります。 rl.Linkを使用してWeb APIでHTTPSリンクを生成

48
Viktor Bahtev