【问题标题】:How do I generate a URL outside of a controller in ASP.NET WebApi 2?如何在 ASP.NET WebApi 2 中的控制器之外生成 URL?
【发布时间】:2019-05-08 05:20:02
【问题描述】:

如何从 ASP.net WebApi 2 中控制器外部的辅助方法生成指向控制器操作的 URL?

return new UrlHelper().Link("DefaultApi", new
{
    Controller = "MyController",
    Action = "MyAction"
});

更新 1
在 WebApi 中生成 URL 与 ASP.net MVC 不同

更新 2
这是路由配置:

config.Routes.MapHttpRoute(
    "DefaultApi",
    "API/{Controller}/{Action}"
);

【问题讨论】:

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


【解决方案1】:

这是我克服这个问题的方法:

路由配置

config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{action}",
        defaults: new { id = RouteParameter.Optional }
);

助手类

public static string GenerateLink(HttpRequestMessage httpRequest)
{
    var urlHelper = new UrlHelper(httpRequest).Route("DefaultApi", new
    {
        Controller = "MyController",
        Action = "MyAction"
    });

    return httpRequest.RequestUri.Scheme + "://" + httpRequest.RequestUri.Authority + urlHelper;
}

最后是调用助手类的api controller

public class DefaultController : ApiController
{
    [HttpGet]
    public string Default()
    {
        var link = HelperClass.GenerateLink(Request);
        return link;
    }
}

【讨论】:

  • 在这个例子中 UrlHelper 返回 null
  • @Mehran 将Request 传递给GenerateLink() 方法(如HelperClass.GenerateLink(Request))至关重要。否则,HttpRequestMessage httpRequest 将在 GenerateLink() 方法中为空
  • 是的,我将 Request 传递给像 HelperClass.GenerateLink(Request) 这样的 GenerateLink 方法,但 HttpRequestMessage httpRequest 为空
  • @Mehran 好吧,这是另一个问题,您必须发布一个新问题并显示您的代码结构并询问为什么Request 在控制器内部是null。或者至少请更新您当前的问题并解决新问题。
  • 我为错误的答案道歉,请求在控制器中不为空!实际上 new UrlHelper(httpRequest).Route(...) return null
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
  • 2016-06-15
  • 2020-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多