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

时间:2014-08-11 13:57:44

标签: c# asp.net-mvc-5 asp.net-web-api2

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

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

P.S。

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

所以基本上:向我的api/generateurl发出获取请求,并返回一个网址:

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

2 个答案:

答案 0 :(得分:48)

也许在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 }
);

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

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

希望这有帮助。

修改

这可能有助于协议部分: Generate HTTPS link in Web API using Url.Link

答案 1 :(得分:1)

这是VictorBahtev提到ASP.NET CORE的答案的扩展。

在2020年,您的项目有可能瞄准ASP.NET Core 3.1。在当前版本的WebAPI中,有一种方法可以执行OP确切要求的技巧。下面的方法不需要route参数(OP未提供):

string url = this.Url.ActionLink("ActionName", "ControllerName", new { product = product.Id, price = price, ..}[, protocol = null, host = null, string fragment = null]);