C# ASP.NET Web API使用url.Action生成url
如何在Web Api中生成相同的urlC# ASP.NET Web API使用url.Action生成url,c#,asp.net-mvc-5,asp.net-web-api2,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); 附言 url应生成到MVC控制器/操作,但应从web api中生成 因此基本上:向myapi/generateurl发出get请求,这将返回一个url: http://domain.com/controller/ac
var url = Url.Action("Action", "Controller", new { product = product.Id, price = price }, protocol: Request.Url.Scheme);
附言
url应生成到MVC控制器/操作,但应从web api中生成
因此基本上:向myapi/generateurl
发出get请求,这将返回一个url:
http://domain.com/controller/action?product=productId&price=100
Web Api控制器中最接近Url.Action的帮助程序可能是Url.Link方法,它将通过路由名称、控制器名称、操作名称和路由参数(如果需要)生成Url 下面是一个简单的例子 默认应用程序启动/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¶m2=somestring
我没有找到如何传递protocol/url模式,但是在最后,它将只是一个字符串,如果您知道协议应该是什么,您可以对它进行操作
希望这有帮助
编辑:
public class MyWebApiController : ApiController
{
public string Get()
{
var url = this.Url.Link("Default", new { Controller = "MyMvc", Action = "MyAction", param1 = 1, param2 = "somestring" });
return url;
}
}
这可能有助于协议部分:
这扩展了VictorBahtev的回答,提到了ASP.NET核心 2020年,您的项目有可能以ASP.NET Core 3.1为目标。在当前版本的WebAPI中,有一种方法可用于执行OP所要求的技巧。下面的方法不需要路由参数(OP未提供该参数):
Default
是什么意思?Default
是路线的名称。请参见RouteConfig.cs
如果WebAPI2控制器用RoutePrefix[RoutePrefix(“api/MyContoller”)]修饰,则这似乎不起作用。您将获得后跟控制器名称的基本URL,而不是后跟路由前缀的所需基本URL。i、 e.您得到:HOST/MyContoller/MyAction而不是HOST/api/MyContoller/MyAction(其中api/MyContoller是我的路由前缀,正好包含我的控制器名称),如果该操作具有路由修饰,您可能会怀疑类似的问题。我需要在同一个控制器上获取操作的URL,并且正在使用RoutePrefix和路由修饰器。我发现调用Url.Content(“MyRoute/”)时;(其中“MyRoute”是在同一控制器中装饰不同操作的路由的名称)运行良好。它给了我{HOST}/{ROUTE-PREFIX}/{ROUTE},而不是{HOST}/{CONTROLLER}/{ACTION}(这永远不会解决)