У меня есть пользовательская модель переплета:
public class JsonPolyModelBinder : IModelBinder
{
private readonly JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto };
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
var content = actionContext.Request.Content;
var json = content.ReadAsStringAsync().Result;
var obj = JsonConvert.DeserializeObject(json, bindingContext.ModelType, settings);
bindingContext.Model = obj;
return true;
}
}
При большой полезной нагрузке content.ReadAsStringAsync (). Результат, по-видимому, приводит к превышению времени ожидания моих веб-запросов.
Интерфейс привязки модели вызывает синхронные API-интерфейсы ... но, переместив этот код в мой контроллер:
public async Task<IHttpActionResult> DoStuff()
{
var json = await Request.Content.ReadAsStringAsync();
......
}
И использование await over .Result - веб-запросы проходят без проблем. Мне интересно, почему?