我的问题是这样做的相反: 如何转换的HttpRequestBase成一个HttpRequest对象?
在我的ASP.NET MVC应用程序,我有由接收HttpRequestBase作为参数许多控制器使用的方法。
现在我必须调用该方法从另一个方法,这不是一个动作(这是一个NHibernate的拦截器)。 在这第二个方法我可以访问HttpContext.Current.Request,这是一个HttpRequest对象,我不能将它转换为HttpRequestBase(我认为这是不可能性,由于命名...)。
是否有人知道在什么关系此班,我怎么能解决我的问题? 谢谢。
你要包装你HttpRequest
在HttpRequestWrapper
:
var wrapper = new HttpRequestWrapper(httpRequest);
该HttpRequestWrapper
继承自HttpRequestBase
。
另一种解决方案,它不需要创建一个新的实例:
var httpRequestBase = httpRequest.RequestContext.HttpContext.Request;
我曾在MVC 5测试这一点。
我发现下面的扩展方法有用:
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()
在我的应用我有电话从需要访问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地址