Mi problema es el opuesto a esto: ¿Cómo convierto un HttpRequestBase en un objeto HttpRequest?
En mi aplicación ASP.NET MVC tengo un método utilizado por muchos controladores que reciben un HttpRequestBase como argumento.
Ahora tengo que llamar a ese método desde otro método, que no es una acción (es un interceptor nhibernado). En este segundo método, pude acceder a HttpContext.Current.Request, que es una HttpRequest y no puedo enviarla a HttpRequestBase (pensé que era posible debido al nombre ...).
¿Alguien sabe en qué relación están estas clases y cómo puedo resolver mi problema? Gracias.
asp.net-mvc
httprequest
Daniele Armanasco
fuente
fuente
new HttpRequestWrapper(HttpContext.Current.Request)
Esta es otra solución que no requiere crear una nueva instancia:
var httpRequestBase = myHttpRequest.RequestContext.HttpContext.Request;
fuente
En mi aplicación, recibí llamadas de varios lugares diferentes que necesitaban acceso a HttpRequestBase. Creé este conjunto de métodos de extensión para obtener y convertir varios tipos Http diferentes en HttpRequestBase, luego usé HttpRequestBase como el tipo base para los métodos de interfaz y clase a través de la aplicación cuando necesitaba acceso a la solicitud.
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); } }
Encontré varias respuestas SO que me ayudaron a construir estas extensiones:
fuente
Encuentro útiles los siguientes métodos de extensión:
public static HttpContextBase AsBase(this HttpContext context) { return new HttpContextWrapper(context); } public static HttpRequestBase AsBase(this HttpRequest context) { return new HttpRequestWrapper(context); }
Uso:
HttpContext.Current.AsBase() HttpContext.Current.Request.AsBase()
fuente