我的问题与此相反: How do I convert an HttpRequestBase into an HttpRequest object?
在我的ASP.NET MVC应用程序中,我有一个许多控制器使用的方法,它接收HttpRequestBase作为参数。
现在我必须从另一个方法调用该方法,这不是一个动作(它是一个nhibernate拦截器)。在第二种方法中,我可以访问HttpContext.Current.Request,这是一个HttpRequest,我无法将其强制转换为HttpRequestBase(我认为由于命名而有可能......)。
有人知道这个课程的关系是什么,我如何解决我的问题? 谢谢。
答案 0 :(得分:115)
您希望将HttpRequest
包裹在HttpRequestWrapper
:
var wrapper = new HttpRequestWrapper(httpRequest);
HttpRequestWrapper
继承自HttpRequestBase
。
答案 1 :(得分:17)
不需要创建新实例的替代解决方案:
var httpRequestBase = httpRequest.RequestContext.HttpContext.Request;
我在MVC 5中对此进行了测试。
答案 2 :(得分: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()
答案 3 :(得分:0)
在我的应用程序中,我有来自不同地方的调用,这些调用需要访问HttpRequestBase。我创建了这套扩展方法,以获取几种不同的Http类型并将其从HttpRequestBase转换为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答案,这些答案帮助我构建了这些扩展: