2012-05-07 2 views
1

Когда действие вызывается и генерирует конкретное исключение, я использую атрибут 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); 
    } 

Редактировать: Когда я попал в службу локально, корпус включен. Кажется, проблема заключается в том, что вы ударяете службу с удаленной машины.

+0

Как свойство элементы заселяется? – cecilphillip

+0

Они устанавливаются, когда исключение выбрано, а элементы не пустые. – Thad

+0

Похоже, что запросы могут не входить в конвейер веб-API. Чтобы проверить их, вы можете добавить обработчик сообщений для регистрации входящих запросов до того, как они будут перенаправлены на реализацию ApiController. Код будет чем-то вроде обработчика проверки подлинности в [этом ответе SO] (http://stackoverflow.com/questions/10434389/webapi-authorization-filter-with-token-in-json-payload/10435013#10435013), и он также показывает, как его зарегистрировать. –

ответ

2

Попробуйте это:

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = 
      IncludeErrorDetailPolicy.Always 
Смежные вопросы