Ho una classe che eredita da ApiController. Ha un metodo Put come questo:Come ottenere il contenuto già letto
[PUT("user/{UserId}")]
public HttpResponseMessage Put(string userId, PaymentRequest paymentRequest)
{
// Calling business logic and so forth here
// Return proper HttpResponseMessage here
}
Il metodo funziona bene come sopra. Ora ho bisogno di convalidare la firma della chiamata al metodo, ma qui mi imbatto in un problema. La firma è essenzialmente una combinazione di metodo + url + corpo. Il metodo che posso ottenere chiamando Request.Method e l'url che posso ottenere chiamando Request.RequestUri.ToString(), ma non riesco a ottenere il corpo come era prima dello è stato automaticamente deserializzato in un Oggetto PaymentRequest dal framework asp.net MVC4.
Il mio primo tentativo:. Come ho ormai capito Request.Content.ReadAsStringAsync() Risultato restituisce nulla. Questo perché il contenuto può essere letto solo una volta.
Il mio secondo tentativo: Ho provato a serializzarlo su una stringa JSON.
var serializer = new JavaScriptSerializer();
var paymentRequestAsJson = serializer.Serialize(paymentRequest);
Il problema con questo è che la formattazione risulta leggermente diversa dalla parte del corpo della firma. Ha gli stessi dati, ma alcuni più spazi.
Non riesco a modificare ciò che chiama il chiamante del mio metodo Put, poiché si tratta di un componente di terze parti. Cosa dovrei fare?
Perché "Request.InputStream" non funziona qui? Perché la necessità di un contesto? –
Perché non esiste tale proprietà 'Request.InputStream'. Non dimenticare che all'interno di un ApiController la proprietà Request è di tipo 'HttpRequestMessage' e non' HttpRequestBase'. –
Oh - Mi sto confondendo scrivendo questi esempi in MVC3, il mio male senza dubbio ... –