У меня есть класс, который наследуется от ApiController. У него есть метод Put-like:
[PUT("user/{UserId}")]
public HttpResponseMessage Put(string userId, PaymentRequest paymentRequest)
{
// Calling business logic and so forth here
// Return proper HttpResponseMessage here
}
Метод работает нормально, поскольку он выше. Теперь мне нужно проверить подпись вызова метода, но здесь я столкнулся с проблемой. Подпись, по сути, представляет собой комбинацию метода + url + body. Метод, который я могу получить, вызвав Request.Method и url, который я могу получить, вызвав Request.RequestUri.ToString(), но я не могу схватить тело, поскольку он был до, он был автоматически десериализован в объект PaymentRequest с помощью инфраструктуры asp.net MVC4.
Моя первая попытка: Как я теперь понял Request.Content.ReadAsStringAsync(). Результат ничего не возвращает. Это связано с тем, что содержимое можно прочитать только один раз.
Моя вторая попытка: Я попытался преобразовать его в строку JSON.
var serializer = new JavaScriptSerializer();
var paymentRequestAsJson = serializer.Serialize(paymentRequest);
Проблема заключается в том, что форматирование оказывается немного отличным от основной части сигнатуры. Он имеет те же данные, но еще несколько пробелов.
Я не могу изменить то, что делает caller моего метода Put, так как это сторонний компонент. Что мне делать?