ASP.NET Web API使用Url.Action生成URL

Dav*_*ury 37 c# asp.net-mvc-5 asp.net-web-api2

如何在Web Api中生成相同的URL?

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

PS

应该将URL生成为MVC控制器/操作,但是应该从web api中生成.

所以基本上:向我发出一个get请求,api/generateurl然后返回一个url:

http://domain.com/controller/action?product=productId&price=100
Run Code Online (Sandbox Code Playgroud)

Vik*_*tev 50

也许在Web Api Controller中最接近Url.Action的帮助器是Url.Link方法,它将通过路由名称,控制器名称,操作名称和路由参数(如果需要)生成URL.

这是一个简单的例子

默认的App_start/RouteConfig.cs

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

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

MVC控制器

public class MyMvcController : Controller
{
    public ActionResult MyAction(int param1, string param2)
    {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

WebApi控制器生成的URL将是http://myDomain/MyMvc/MyAction?param1=1&param2=somestring.

我没有找到如何传递protocol/url架构,但是它只是一个字符串,如果你知道协议应该是什么,你可以操作它.

希望这可以帮助.

编辑:

这可能有助于协议部分: 使用Url.Link在Web API中生成HTTPS链接