Когда действие вызывается и генерирует конкретное исключение, я использую атрибут ExceptionFilterAttribute, переводящий ошибку в другой ответ как HttpStatusCode.BadRequest. Это работало локально, но мы подтолкнули его к серверу, и теперь, когда я получаю BadRequest, я не получаю никакой информации в ответе. Что мне не хватает?Mvc4 WepApi Пустой отклик, когда не 200
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
MyException ex = actionExecutedContext.Exception as MyException;
if (ex == null)
{
base.OnException(actionExecutedContext);
return;
}
IEnumerable<InfoItem> items = ex.Items.Select(i => new InfoItem
{
Property = i.PropertyName,
Message = i.ToString()
});
actionExecutedContext.Result = new HttpResponseMessage<IEnumerable<InfoItem>>(items, HttpStatusCode.BadRequest);
}
Редактировать: Когда я попал в службу локально, корпус включен. Кажется, проблема заключается в том, что вы ударяете службу с удаленной машины.
Как свойство элементы заселяется? – cecilphillip
Они устанавливаются, когда исключение выбрано, а элементы не пустые. – Thad
Похоже, что запросы могут не входить в конвейер веб-API. Чтобы проверить их, вы можете добавить обработчик сообщений для регистрации входящих запросов до того, как они будут перенаправлены на реализацию ApiController. Код будет чем-то вроде обработчика проверки подлинности в [этом ответе SO] (http://stackoverflow.com/questions/10434389/webapi-authorization-filter-with-token-in-json-payload/10435013#10435013), и он также показывает, как его зарегистрировать. –