У меня есть простой проект C # Web Api, который предоставляет несколько спокойных конечных точек.
Обработка / ведение журнала неустранимых ошибок сервера, как правило, хорошо описывается с помощью:
- Реализация /переопределение метода Application_Error в Global.asax.cs
protected override void Application_Error(object sender, EventArgs e)
{
var ex = Server.GetLastError();
_logger.Error("Unexpected error while initializing application", ex);
}
Или добавив фильтр обработчика исключений:
config.Filters.Add(new ExceptionHandlingAttribute());
ИЛИ
GlobalConfiguration.Configuration.Filters.Add(new ExceptionHandlingAttribute());
public class ExceptionHandlingAttribute : ExceptionFilterAttribute
{
private static readonly ILog _logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
_logger.Error("Unexpected error in API.", actionExecutedContext.Exception);
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError)
{
Content = new StringContent("An error occurred, please try again or contact the administrator."),
ReasonPhrase = "Critical Exception"
});
}
}
Однако,когда во время создания экземпляра контроллера возникает ошибка из-за ошибки внедрения зависимостей в конструкторе этого кода:
public class DataController : ApiController
{
private readonly IDataService _dataService;
public DataController(IDataService dataService)
{
_dataService = dataService;
}
[AllowAnonymous]
[HttpGet]
public IHttpActionResult GetSomeStuff()
{
return Ok(new AjaxResponse("somestuff"));
}
, ни один из перечисленных выше методов не перехватывает ошибку. Как я могу поймать эти ошибки?