Hi,
In my asp.net web API, I am using both GlobalExceptionHandler and CustomExceptionFilter. I think they do the same job, hiding the actual error from the client and send them "HTTP 500 - Internal Server Error. Please Contact your Administrator." response. I wonder if I remove GlobalExcepitonHandler and add Nlog into CustomExceptionFilter, can I still send the same response and log errors? What are your opinions?
UnhandledExceptionLogger can't catch all the errors that's why I would like to add logging inside of one of them.
CustomExceptionFilter:
GlobalExceptionHandler:
UnhandledExceptionFilter:
In my asp.net web API, I am using both GlobalExceptionHandler and CustomExceptionFilter. I think they do the same job, hiding the actual error from the client and send them "HTTP 500 - Internal Server Error. Please Contact your Administrator." response. I wonder if I remove GlobalExcepitonHandler and add Nlog into CustomExceptionFilter, can I still send the same response and log errors? What are your opinions?
UnhandledExceptionLogger can't catch all the errors that's why I would like to add logging inside of one of them.
CustomExceptionFilter:
C#:
public class CustomExceptionFilter : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
base.OnException(actionExecutedContext);
var response = new HttpResponseMessage(HttpStatusCode.InternalServerError)
{
//Content = new StringContent("An unhandled exception was thrown by service."),
ReasonPhrase = "HTTP 500 - Internal Server Error. Please Contact your Administrator."
};
actionExecutedContext.Response = response;
}
}
GlobalExceptionHandler:
C#:
public class GlobalExceptionHandler : ExceptionHandler
{
public override void Handle(ExceptionHandlerContext context)
{
var result = new HttpResponseMessage(HttpStatusCode.InternalServerError)
{
Content = new StringContent("HTTP 500 - Internal Server Error. Please Contact your Administrator."),
ReasonPhrase = "Exception"
};
context.Result = new ErrorMessageResult(context.Request, result);
}
public class ErrorMessageResult : IHttpActionResult
{
private HttpRequestMessage _request;
private readonly HttpResponseMessage _httpResponseMessage;
public ErrorMessageResult(HttpRequestMessage request, HttpResponseMessage httpResponseMessage)
{
_request = request;
_httpResponseMessage = httpResponseMessage;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
return Task.FromResult(_httpResponseMessage);
}
}
}
C#:
public class UnhandledExceptionLogger : ExceptionLogger
{
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
public override void Log(ExceptionLoggerContext context)
{
var timestamp = DateTime.UtcNow;
//NLOG
NLog(logger, context.Exception, timestamp);
}
private void NLog(Logger logger, Exception message, DateTime timestamp)
{
var sb = new StringBuilder();
sb.AppendLine(message.ToString());
sb.AppendLine(timestamp.ToLongDateString());
logger.Error(sb.ToString());
}
}