在ApiController之外的asp.net web api中为资源生成url

时间:2012-05-07 23:51:55

标签: asp.net-web-api

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

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

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

UrlHelper类怎么样:

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

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

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

答案 2 :(得分:-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
      }
 }