10

寻找一种在 asp.net web api 中为特定资源构造或生成 url 的方法。它可以在控制器中完成,因为它继承自 ApiController,因此您获得了 UrlHelper。

我希望从 ApiController 的上下文中构造资源 url。

4

3 回答 3

2

这是我所做的:

  • 需要 HttpContext/Request,因此在 Application_Start 中可能不起作用。
  • 仅在 WebApi 1 中测试
  • 仅适用于在 GlobalConfiguration 中注册的路由(但如果您有其他路由,只需将其传入即可)
// given HttpContext context, e.g. HttpContext.Current
var request = new HttpRequestMessage(HttpMethod.Get, context.Request.Url) {
    Properties = {
        { HttpPropertyKeys.HttpConfigurationKey, GlobalConfiguration.Configuration },
        { HttpPropertyKeys.HttpRouteDataKey, new HttpRouteData(new HttpRoute()) },
        { "MS_HttpContext", new HttpContextWrapper(context) }
    }
};

var urlHelper = new UrlHelper(request);
于 2014-10-23T08:49:49.457 回答
0

UrlHelper 类呢:

System.Web.Http.Routing.UrlHelper;
System.Web.Mvc.UrlHelper

MVC 有一些有用的静态方法来接受路由信息,或者它可以用作通过传入 RequestContext(在大多数 MVC 过滤器和其他各种地方都可用)创建的实例。实例方法应该正是您生成 url 所需要的。

HTTP 接受一个 ControllerContext(在大多数 HTTP 过滤器和其他各种地方也可用)。

于 2012-07-10T13:19:40.940 回答
-1

我不确定 ApiController,因为我以前没有使用过它。这对您来说可能是多余的,但话又说回来,它可能不是。查看您的 Global.asax.cs 文件,特别是 RegisterRoutes 函数。最初,您应该看到以下映射:

  routes.MapRoute ("Default", "{controller}/{action}/{id}", new { controller = "MyController", action = "Index", id = "" });

因此,默认情况下,您的应用程序设置为处理以下格式的路由:

 {ControllerName}/{ActionName}/{ResourceId}

如下设置的控制器类应该使您能够接收该格式的请求。

 class {ControllerName}Controller : ApiController
 {
      public ActionResult {ActionName} (string id)
      {
           // fetch your resource by its unique identifier
      }
 }
于 2012-05-08T00:02:23.200 回答