5

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 を取得する簡単な方法が必要です-何を見落としていますか?

ありがとう

ジョン

4

1 に答える 1

2

最終的に、リクエストを公開する次の基本フォーマッタを作成しました。これで、それを 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;
  }
}
于 2012-07-15T19:02:01.103 に答える