在asp.net web api中寻找构建或生成特定资源的URL的方法。它可以在控制器中完成,因为它继承自ApiController,因此您获得了UrlHelper。
我希望从ApiController的上下文中构造资源url。
答案 0 :(得分:2)
这是我做的:
// 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
}
}