Cuando debemos utilizar el HttpResponseMessage objeto y cuando debemos utilizar el Request.CreateResponse(...) método?

También, ¿cuál es la diferencia entre el HttpResponseMessage objeto y el Request.CreateResponse(...) método?

  • CreateResponse() y CreateErrorResponse() son sólo los ayudantes (los métodos de extensión) para hacer que los desarrolladores de’ la vida más fácil.
  • Creo que también hay una diferente, que es CreateResponse (y probablemente CreateErrorResponse) será el uso actual de los encabezados de solicitud para la respuesta, Pero HttpResponseMessage crear Nueva respuesta y encabezados, eso es cierto?
  • Usted puede explorar a partir de código fuente: github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/…
InformationsquelleAutor user197508 | 2014-02-27

2 Comentarios

  1. 44

    ¿Cuál es la diferencia entre HttpResponseMessage objeto y
    Solicitud.CreateResponse(…) el método?

    Es probablemente obvio, pero Request.CreateResponse es un método auxiliar para la creación de HttpResponseMessage objeto.

    Cuándo debemos usar HttpResponseMessage objeto y Cuándo debemos usar
    Solicitud.CreateResponse(…) el método?

    Si quieres utilizar el built-in de contenido de la negociación de la función, el uso Request.CreateResponse. Cuando usted devuelve un objeto, ASP.NET Web API para serializar el objeto en el cuerpo de respuesta. Esto podría ser en general, JSON o XML (otros tipos de medios son posibles, pero que necesita para crear el formateador). El tipo de soporte elegido (JSON o XML) se basa en la solicitud tipo de contenido, Accept encabezado de la petición y de forma y contenido de la negociación es el proceso que determina el tipo de medios a ser utilizados. Mediante el uso de Request.CreateResponse, automáticamente utilizando el resultado de este proceso.

    Por otro lado, si usted cree HttpResponseMessage sí mismo, tiene que especificar un formateador de los medios de comunicación basados en la cual el objeto se serializa y especificando los medios de comunicación formateador de usted mismo, usted puede invalidar los resultados de conneg.

    EDITAR
    Aquí está un ejemplo de cómo especificar JSON formateador.

    public HttpResponseMessage Get(int id)
    {
        var foo = new Foo() { Id = id };
        return new HttpResponseMessage()
        {
            Content = new ObjectContent<Foo>(foo,
                      Configuration.Formatters.JsonFormatter)
        };
    }

    Con esto, incluso si usted envía una solicitud con Accept:application/xml, sólo obtendrá JSON.

    • Cómo puedo especificar un formateador de los medios de comunicación basados en la cual el objeto se serializa en HttpResponseMessage ? por favor dar un ejemplo
    • corto y claro – gracias.
    • usted no tiene que especificar porque va a suceder de forma automática por el CreateResponse – los detalles que usted puede leer aquí imcodebased.com/…
  2. 4

    Solicitud.CreateResponse(…) es sólo un generador, también devuelve la instancia de HttpResponseMessage, aquí está el código:

    public static HttpResponseMessage CreateResponse<T>(this HttpRequestMessage request, HttpStatusCode statusCode, T value, HttpConfiguration configuration)
    {
    if (request == null)
    throw Error.ArgumentNull("request");
    configuration = configuration ?? HttpRequestMessageExtensions.GetConfiguration(request);
    if (configuration == null)
    throw Error.InvalidOperation(SRResources.HttpRequestMessageExtensions_NoConfiguration, new object[0]);
    IContentNegotiator contentNegotiator = ServicesExtensions.GetContentNegotiator(configuration.Services);
    if (contentNegotiator == null)
    {
    throw Error.InvalidOperation(SRResources.HttpRequestMessageExtensions_NoContentNegotiator, new object[1]
    {
    (object) typeof (IContentNegotiator).FullName
    });
    }
    else
    {
    IEnumerable<MediaTypeFormatter> formatters = (IEnumerable<MediaTypeFormatter>) configuration.Formatters;
    ContentNegotiationResult negotiationResult = contentNegotiator.Negotiate(typeof (T), request, formatters);
    if (negotiationResult == null)
    {
    return new HttpResponseMessage()
    {
    StatusCode = HttpStatusCode.NotAcceptable,
    RequestMessage = request
    };
    }
    else
    {
    MediaTypeHeaderValue mediaType = negotiationResult.MediaType;
    return new HttpResponseMessage()
    {
    Content = (HttpContent) new ObjectContent<T>(value, negotiationResult.Formatter, mediaType),
    StatusCode = statusCode,
    RequestMessage = request
    };
    }
    }

Dejar respuesta

Please enter your comment!
Please enter your name here