2017-02-07 8 views
0

Я создал пользовательский объект, который я использую для генерации ответа об ошибке json для всех ошибок. Проблема, с которой я сталкиваюсь, есть некоторые ошибки, которые я не могу уловить. Например, если я пытаюсь вызвать действие, которое не поддерживает GET ответ по умолчаниюASP.NET Переопределить все стандартные ответы об ошибках HTTP

{ «Сообщение»: «Запрашиваемый ресурс не поддерживает метод HTTP „GET“»}

Это прекрасно, но я хочу контролировать формат. Я хочу контролировать каждую автоматическую ошибку, как это, поэтому я могу убедиться, что ничего не получается, что я не хочу выводить. Мне нужно уметь грациозно информировать клиента о возникновении исключения кода.

Я нашел это, и это, кажется, то, что я ищу, но он, похоже, не ловит ошибки, поскольку для них нет соответствующих действий. How to override all standard error pages in WebAPI

Я попытался реализовать это, но я все равно получаю то же сообщение об ошибке сверху, даже если у меня это в главном контроллере.

[AllowAnonymous] 
[ActionName("405")] 
[HttpGet] 
public string Status405() 
{ 
    return "error"; 
} 

Я надеялся, что бы OnError событие или что-то, что будет действовать как поймать все, чтобы я мог отвергнуть все. Я пытался работать построена на HttpResponseEx

public class ErrorFilter : System.Web.Http.HttpResponseException 
{ 
    public override string Message 
    { 
     get 
     { 
      return "My custom response based on whatever params are in this error"; 
     } 
    } 
} 

Это не работает либо и я могу понять, почему, как оно не задействовать какие-либо события, которые получают запускаемые.

Несомненно, есть способ сделать это. Как это обычно делается?

ответ

0

В файле web.config необходимо включить пользовательские ошибки. По умолчанию он установлен на удаленный, что позволяет разработчику видеть трассировку стека и конечного пользователя, чтобы увидеть хорошую страницу ошибок. Вы хотите включить его. См. Здесь для получения более подробной информации. https://msdn.microsoft.com/en-us/library/h0hfz6fc(v=vs.85).aspx

+0

Не относится ли это только к сообщениям, которые обрабатывает IIS? Например, если кто-то попытается получить доступ к директории iis, будет отображаться 403. В этом случае фактический контроллер, похоже, генерирует этот ответ, а не IIS. –

+0

Действительная точка. Проверьте файл global.asax на что-то вроде public static void RegisterGlobalFilters (Фильтры GlobalFilterCollection) { filters.Add (новый HandleErrorAttribute()); } на основе этого http://stackoverflow.com/questions/8128302/custom-error-handler-for-http-error-405-in-mvc –

 Смежные вопросы

  • Нет связанных вопросов^_^