我发现有几个消息来源说你不应该在WebApi中使用HttpContext.Current但是没有人说你应该如何处理我们曾经使用HttpContext.Current的情况。
例如,我有一个LinkProvider类,它为对象创建链接。 (简化以保持主题)。
public abstract class LinkProvider<T> : ILinkProvider<T>
{
protected ILink CreateLink(string linkRelation, string routeName, RouteValueDictionary routeValues)
{
var context = System.Web.HttpContext.Current.Request.RequestContext;
var urlHelper = new System.Web.Mvc.UrlHelper(context);
var url = string.Format("{0}{1}", context.HttpContext.Request.Url.GetLeftPart(UriPartial.Authority), urlHelper.RouteUrl(routeName, routeValues));
///...
return new Link(linkRelation, url);
}
}
此类由MediaTypeFormatter使用。
此类应使用来自原始请求的同一主机构建链接,并利用原始请求中的任何路由值。
但是......如何获得HttpRequestMessage?这将由MediaTypeFormatter封装 - 但它也没有。
必须有一种简单的方法来获取HttpRequestMessage - 我可以忽略什么?
感谢
乔恩
答案 0 :(得分:2)
我最终创建了以下基础Formatter,它公开了请求,现在我可以将它传递给LinkProvider。
public class JsonMediaTypeFormatterBase : JsonMediaTypeFormatter
{
public override MediaTypeFormatter GetPerRequestFormatterInstance(Type type, System.Net.Http.HttpRequestMessage request, MediaTypeHeaderValue mediaType)
{
Request = request;
return base.GetPerRequestFormatterInstance(type, request, mediaType);
}
protected HttpRequestMessage Request
{
get;
set;
}
}