我有一個從ApiController繼承的類。它有一個像這樣的Put方法:如何獲取已閱讀的內容
[PUT("user/{UserId}")]
public HttpResponseMessage Put(string userId, PaymentRequest paymentRequest)
{
// Calling business logic and so forth here
// Return proper HttpResponseMessage here
}
該方法正常工作,因爲它在上面。現在我需要驗證方法調用的簽名,但是在這裏我遇到了一個問題。簽名基本上是方法+網址+正文的組合。我可以通過調用Request.Method和我可以通過調用Request.RequestUri.ToString()獲得的url來獲得該方法,但是我無法獲取正文,因爲它是之前的它被自動反序列化爲PaymentRequest對象由asp.net MVC4框架。
我的第一次嘗試: 正如我現在理解的Request.Content.ReadAsStringAsync()。結果什麼也沒有返回。這是因爲內容只能被讀取一次。
我的第二次嘗試: 我試圖將其序列化回JSON字符串。
var serializer = new JavaScriptSerializer();
var paymentRequestAsJson = serializer.Serialize(paymentRequest);
問題在於格式化結果與簽名的正文部分略有不同。它有相同的數據,但有更多的空間。
我無法更改我的Put方法的調用者所做的操作,因爲這是第三方組件。我該怎麼辦?
爲什麼只是'Request.InputStream'在這裏工作?爲什麼需要上下文? – 2012-08-10 13:01:46
因爲沒有這樣的屬性'Request.InputStream'。不要忘記,在ApiController中,Request屬性的類型爲「HttpRequestMessage」,而不是「HttpRequestBase」。 – 2012-08-10 13:02:09
哦 - 我在MVC3中編寫這些示例時感到困惑,我的確不容置疑...... – 2012-08-10 13:03:18