如何转换一个HttpRequest成HttpRequestBase对象?(How do I conv

2019-08-17 08:50发布

我的问题是这样做的相反: 如何转换的HttpRequestBase成一个HttpRequest对象?

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

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

是否有人知道在什么关系此班,我怎么能解决我的问题? 谢谢。

Answer 1:

你要包装你HttpRequestHttpRequestWrapper

var wrapper = new HttpRequestWrapper(httpRequest);

HttpRequestWrapper继承自HttpRequestBase



Answer 2:

另一种解决方案,它不需要创建一个新的实例:

var httpRequestBase = httpRequest.RequestContext.HttpContext.Request;

我曾在MVC 5测试这一点。



Answer 3:

我发现下面的扩展方法有用:

    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()


Answer 4:

在我的应用我有电话从需要访问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答案,帮助我建立这些扩展:

  • 如何转换的HttpRequestBase成一个HttpRequest对象?
  • 转换HttpRequestMessage到的HttpRequest
  • 得到远程主机的IP地址


文章来源: How do I convert an HttpRequest into an HttpRequestBase object?