【问题标题】:How do I convert an HttpRequest into an HttpRequestBase object?如何将 HttpRequest 转换为 HttpRequestBase 对象?
【发布时间】:2013-02-22 21:33:15
【问题描述】:

我的问题与此相反: How do I convert an HttpRequestBase into an HttpRequest object?

在我的 ASP.NET MVC 应用程序中,我有一个由许多控制器使用的方法,这些控制器接收 HttpRequestBase 作为参数。

现在我必须从另一个方法调用该方法,这不是一个动作(它是一个休眠拦截器)。在第二种方法中,我可以访问 HttpContext.Current.Request,它是一个 HttpRequest,但我无法将其转换为 HttpRequestBase(由于命名,我认为这是可能的......)。

有人知道这些类是什么关系,我该如何解决我的问题? 谢谢。

【问题讨论】:

    标签: asp.net-mvc httprequest


    【解决方案1】:

    您需要将HttpRequest 包装在HttpRequestWrapper 中:

    var wrapper = new HttpRequestWrapper(httpRequest);
    

    HttpRequestWrapper 继承自 HttpRequestBase

    【讨论】:

    • 可能会有所帮助new HttpRequestWrapper(HttpContext.Current.Request)
    【解决方案2】:

    这是另一个不需要创建新实例的解决方案:

    var httpRequestBase = myHttpRequest.RequestContext.HttpContext.Request;
    

    【讨论】:

      【解决方案3】:

      在我的应用程序中,我收到了来自需要访问 HttpRequestBase 的多个不同位置的调用。我创建了这组扩展方法来获取几种不同的 Http 类型并将其转换为 HttpRequestBase,然后在需要访问请求时通过应用程序使用 HttpRequestBase 作为接口和类方法的基类型。

      public static class RequestExtensions
      {
          public static HttpRequestBase GetHttpRequestBase(this HttpContext httpContext)
          {
              if (httpContext == null)
              {
                  throw new ArgumentException("Context is null.");
              }
      
              return httpContext.Request.ToHttpRequestBase();
          }
      
          public static HttpRequestBase GetHttpRequestBase(this HttpRequestMessage httpRequestMessage)
          {
              if (httpRequestMessage == null)
              {
                  throw new ArgumentException("Request message is null.");
              }
      
              HttpContextWrapper context = null;
              if (httpRequestMessage.Properties.ContainsKey("MS_HttpContext"))
              {
                  context = httpRequestMessage.Properties["MS_HttpContext"] as HttpContextWrapper;
              }
              if (context == null)
              {
                  throw new ArgumentException("Context is null.");
              }
      
              return context.Request;
          }
      
          public static HttpRequestBase GetHttpRequestBase(this HttpApplication httpApplication)
          {
              if (httpApplication == null)
              {
                  throw new ArgumentException("Application is null.");
              }
      
              return httpApplication.Request.ToHttpRequestBase();
          }
      
          public static HttpRequestBase ToHttpRequestBase(this HttpRequest httpRequest)
          {
              if (httpRequest == null)
              {
                  throw new ArgumentException("Request is null.");
              }
      
              return new HttpRequestWrapper(httpRequest);
          }
      }
      

      我遇到了几个帮助我构建这些扩展的 SO 答案:

      【讨论】:

        【解决方案4】:

        我发现以下扩展方法很有用:

            public static HttpContextBase AsBase(this HttpContext context)
            {
                return new HttpContextWrapper(context);
            }
        
            public static HttpRequestBase AsBase(this HttpRequest context)
            {
                return new HttpRequestWrapper(context);
            }
        

        用法:

        HttpContext.Current.AsBase()
        HttpContext.Current.Request.AsBase()
        

        【讨论】:

          猜你喜欢
          • 2010-11-29
          • 2020-08-05
          • 2013-03-21
          • 1970-01-01
          • 1970-01-01
          • 2013-04-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多