webapi tutorial route net mvc httpget attribute asp c# asp.net-mvc asp.net-web-api asp.net-mvc-routing

c# - tutorial - ¿Cómo acceder al objeto HttpRequestMessage actual globalmente?



route webapi c# (2)

¿Por qué no hacer lo que el equipo de API web ha hecho con su método CreateResponse? Conviértalo en un método de extensión de Controller. De esta forma, aún puede tener el código en una biblioteca de clases separada, pero su método tendrá acceso a la instancia del controlador y, por lo tanto, a toda la información de Configuración.

Y en una nota ligeramente diferente, le sugiero que busque algunos de los esfuerzos de estandarización para las respuestas de error en lugar de inventar la suya propia.

p.ej:

Tengo un método que crea un HttpResponseMessage que contiene un objeto Error que se devolverá en función del formateador de tipo de medio de solicitud actual.

Actualmente, he codificado el XmlMediaTypeFormatter, pero me gustaría poder encontrar la solicitud actual MediaTypeFormatter en tiempo de ejecución, pero no tengo acceso al objeto de solicitud actual, ya que mi código a continuación existe en una biblioteca de clases separada.

private HttpResponseMessage Create(HttpStatusCode statusCode, string errorCode, string errorMessage) { var result = new HttpResponseMessage(statusCode) { Content = new ObjectContent<Error>(new Error() { Code = errorCode, Message = errorMessage }, new XmlMediaTypeFormatter()) }; return result; }

¿Cómo acceder al objeto HttpRequestMessage actual globalmente? algo así como HttpContext.Current.Request

Si es imposible, ¿cómo implementar el método anterior para que sepa qué formateador debería usar para la solicitud actual?


No es imposible, como acabo de descubrir recientemente. En realidad, se agrega a la propiedad Items del HttpContext actual (si hay uno) = [

HttpRequestMessage httpRequestMessage = HttpContext.Current.Items["MS_HttpRequestMessage"] as HttpRequestMessage

Editar:

Esto es a partir de WebAPI v2 .. No puedo estar seguro de las versiones anteriores.