Tengo una clase que hereda de ApiController. Tiene un Put-método como este:Cómo obtener contenido que ya está leído
[PUT("user/{UserId}")]
public HttpResponseMessage Put(string userId, PaymentRequest paymentRequest)
{
// Calling business logic and so forth here
// Return proper HttpResponseMessage here
}
El método funciona bien, ya que es anterior. Ahora necesito validar la firma de la llamada al método, pero aquí me encuentro con un problema. La firma es esencialmente una combinación de método + url + cuerpo. El método que puedo obtener llamando a Request.Method y la URL que puedo obtener llamando a Request.RequestUri.ToString(), pero no puedo obtener el cuerpo como lo fue antes de se deserializó automáticamente en una Objeto PaymentRequest por el framework asp.net MVC4.
Mi primer intento:. ya que ahora tengo entendido Request.Content.ReadAsStringAsync() Resultado no devuelve nada. Esto se debe a que el contenido solo se puede leer una vez.
Mi segundo intento: Intenté serializarlo de nuevo en una cadena JSON.
var serializer = new JavaScriptSerializer();
var paymentRequestAsJson = serializer.Serialize(paymentRequest);
El problema es que el formato es ligeramente diferente de la parte del cuerpo de la firma. Tiene los mismos datos, pero algunos espacios más.
No puedo cambiar lo que hace la persona que llama de mi método Put, ya que este es un componente de un tercero. ¿Que debería hacer?
¿Por qué doesnt simplemente 'Request.InputStream' funciona aquí? ¿Por qué la necesidad de contexto? –
Porque no hay tal propiedad 'Request.InputStream'. No olvide que dentro de un ApiController, la propiedad Request es de tipo 'HttpRequestMessage' y no' HttpRequestBase'. –
Oh - Me estoy confundiendo al escribir estos ejemplos en MVC3, mi mal sin duda ... –