В проекте ASP.NET Web API у меня есть фильтр действий, который проверяет ошибки состояния модели и возвращает код состояния Bad Request
, если они есть. Это выглядит следующим образом:IActionFilter возвращает новую задачу <HttpResponseMessage> никогда не возвращает
public class ValidationFilter : IActionFilter
{
public Task<HttpResponseMessage> ExecuteActionFilterAsync(HttpActionContext context,
CancellationToken cancellationToken,
Func<Task<HttpResponseMessage>> continuation)
{
if(!actionContext.ModelState.IsValid)
{
return new Task<HttpResponseMessage>(() =>
actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest,
actionContext.ModelState);
}
return continuation();
}
}
Теперь, по какой-то причине, любой запрос с государственной ошибкой модели никогда не возвращает. Он просто висит там. Если я отладки, я получаю следующий фильтр в трубопроводе, который начинается с
var result = await continuation();
Если я «Шаг За» этой строки, отладчик вроде выбывает в режим «ожидания», но не больше код не кажется для запуска.
Я предполагаю, что все это потому, что я как-то неправильно понял, как все эти вещи взаимодействуют, но, несмотря на часы работы в Интернете и чтения, я до сих пор не могу понять, как правильно это сделать. Любая помощь - как для понимания, так и для исправления ошибок - глубоко ценится.
Спасибо - я (неправомерно) предположил, что каркас позаботится об этом для меня. –
@ ТомасЛюкен уверен. Взгляните на мое обновление. – i3arnon
Вы не хотите использовать 'Task.Run' внутри WebAPI, [его опасно] (http://blog.stephencleary.com/2012/12/returning-early-from-aspnet-requests.html) –