寻找一种在 asp.net web api 中为特定资源构造或生成 url 的方法。它可以在控制器中完成,因为它继承自 ApiController,因此您获得了 UrlHelper。
我希望从 ApiController 的上下文中构造资源 url。
寻找一种在 asp.net web api 中为特定资源构造或生成 url 的方法。它可以在控制器中完成,因为它继承自 ApiController,因此您获得了 UrlHelper。
我希望从 ApiController 的上下文中构造资源 url。
这是我所做的:
// 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);
UrlHelper 类呢:
System.Web.Http.Routing.UrlHelper;
System.Web.Mvc.UrlHelper
MVC 有一些有用的静态方法来接受路由信息,或者它可以用作通过传入 RequestContext(在大多数 MVC 过滤器和其他各种地方都可用)创建的实例。实例方法应该正是您生成 url 所需要的。
HTTP 接受一个 ControllerContext(在大多数 HTTP 过滤器和其他各种地方也可用)。
我不确定 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
}
}