2016-07-02 4 views
0

Для фильтра исключений, подобного этому.Объект исключения по умолчанию для WebApi2 для фильтра

public override void OnException(HttpActionExecutedContext context) 
    { 
     var resp = new HttpResponseMessage(HttpStatusCode.InternalServerError) 
     { 
      // what must I change here to return an object 
      // similar to the default exception handler? 
      Content = new StringContent("THIS IS MY ERROR"), 
     }; 
     throw new HttpResponseException(resp); 
    } 

Исключение причина возвращается клиенту Javascript является обычной строкой.

Когда исключение выбрасывается в по умолчанию контроллер вWebApi2, объект причина по умолчанию возвращается содержит конфигурационные данные, заголовки и т.д.,. Я не могу найти пример того, как вернуть всю эту дополнительную информацию из моего фильтра исключений. Я попытался проверить источник без толку ...

enter image description here

$http.get('/mydata') 
    .catch(function(reason) { ... do stuff with reason }) 
    .then(...); 

Что мне нужно изменить, чтобы вернуть тот же ответ по умолчанию, а не только простой строки.

Content = new ... // what goes here. 
+0

У меня нет точного кода, но я сделал это несколько раз. Вам нужно вернуть обратно «IHttpActionResult». С этим вы можете либо отправить свои коды статуса HTTP из 500, 400, 401, 403 и т. Д. –

+0

Большое спасибо: Fermat будет гордиться – Jim

ответ

0

кому-либо еще с этой конкретной проблемой.

public override void OnException(HttpActionExecutedContext context) 
{ 
    var exception = context.Exception as DbEntityValidationException; 
    if (exception == null) 
     return; 

    var errors = exception.EntityValidationErrors.SelectMany(_ => _.ValidationErrors); 
    var messages = errors.Select(_ => Culture.Current($"{_.PropertyName}:{_.ErrorMessage}")); 
    var message = Culture.Current($"{context.Exception.Message}<br/>{string.Join("<br/>", messages)}"); 

    // create an error response containing all the required detail... 
    var response = context.Request.CreateErrorResponse(
     HttpStatusCode.InternalServerError, 
     message, 
     exception); 
    throw new HttpResponseException(response); 
} 
0

Причина вы не получите сообщение об ошибке, это ваш HttpResponseMessage не содержит его.
Так что вам нужно, чтобы добавить его в respone объекта

 
    public override void OnException(HttpActionExecutedContext context) 
     { 
      if (context.Exception is NotImplementedException) 
      { 
       context.Response = new HttpResponseMessage(HttpStatusCode.NotImplemented); 
      } 
     } 

и в своем действии, вы бросаете NotImplementedException Exception

[NotImplExceptionFilter] 
    public Contact GetContact(int id) 
    { 
     throw new NotImplementedException("This method is not implemented"); 
    } 

Надеется, что это помогает.

+1

Это не помогает объяснить, как объект данных JavaScript возвращается клиенту по умолчанию IHttpActionResult – Jim