加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-web-api – 如何在WebApi中获取HttpRequestMessage而不

发布时间:2020-12-16 09:47:41 所属栏目:asp.Net 来源:网络整理
导读:我发现有几个消息来源说你不应该在WebApi中使用HttpContext.Current但是没有人说你应该如何处理我们曾经使用HttpContext.Current的情况. 例如,我有一个LinkProvider类,它为对象创建链接. (简化以保持主题). public abstract class LinkProviderT : ILinkProv
我发现有几个消息来源说你不应该在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 – 我可以忽略什么?

谢谢

乔恩

解决方法

我最终创建了以下基础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;
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读