78

我的问题与此相反: 如何将 HttpRequestBase 转换为 HttpRequest 对象?

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

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

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

4

4 回答 4

132

您需要将您的包装HttpRequest在一个HttpRequestWrapper

var wrapper = new HttpRequestWrapper(httpRequest);

HttpRequestWrapper继承自HttpRequestBase.

于 2013-03-07T15:45:35.033 回答
26

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

var httpRequestBase = myHttpRequest.RequestContext.HttpContext.Request;
于 2016-11-10T13:24:38.750 回答
2

在我的应用程序中,我收到了来自需要访问 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);
    }
}

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

于 2019-02-06T05:00:02.240 回答
0

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

    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()
于 2018-11-01T11:44:52.343 回答