В нашем приложении MVC 2 мы имеем JSON модель связующие реализованы следующим образом:Выросших Request.InputStream до достижения ModelBinder
public virtual object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
string input;
using (var reader = new StreamReader(controllerContext.HttpContext.Request.InputStream))
{
input = reader.ReadToEnd();
}
return JsonConvert.DeserializeObject(
input,
bindingContext.ModelType);
}
После обновления MVC 4, я заметил, что мы получали нулевые входящие модели для входящих сообщений JSON , Когда рытье в нем стало очевидным, что что-то вверх по потоку продвигало поток. Этого было достаточно легко зафиксировать, так вот
public virtual object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
string input;
//something upstream after MVC 4 upgrade is advancing the stream to end before we can read it
controllerContext.HttpContext.Request.InputStream.Position = 0;
using (var reader = new StreamReader(controllerContext.HttpContext.Request.InputStream))
{
input = reader.ReadToEnd();
}
return JsonConvert.DeserializeObject(
input,
bindingContext.ModelType);
}
Но мне интересно, что произошло, что сделало необходимым изменение? Была ли предыдущая реализация работает только по совпадению?
Что такое значение Request.Content? Это уже заселено? Если это так, это может объяснить, почему InputStream необходимо переместить. MVC4 также добавил Restful WebAPI, который обеспечивает прямую поддержку для разбора тела запроса в параметрах модели. – B2K