В моем первом приложении asp.net mvc я обрабатываю ошибки с помощью блоков try-catch и возвращаю конкретные сообщения пользователю в виде Httpstatuscode.
В каждой обычной операции есть один и тот же кодовый блок.
Я пытался использовать атрибут исключения обработчика, но мне не удалось вернуть код состояния или пользовательское сообщение с ним.
Есть ли способ заменить эти блоки try catch для каждой функции и вернуть сообщение пользователю?
Вот что я пробовал:
public class ExceptionHandlerFilterAttribute : FilterAttribute, IExceptionFilter
{
private ILogger _logger;
public void OnException(ExceptionContext filterContext)
{
_logger = new NLogLogger();
if (!filterContext.ExceptionHandled)
{
var controller = filterContext.RouteData.Values["controller"].ToString();
var action = filterContext.RouteData.Values["action"].ToString();
var message = filterContext.Exception;
_logger.Log(Business.Enums.LogLevel.Error, string.Concat("/",controller,"/",action), message);
filterContext.ExceptionHandled = true;
filterContext.Result = new ViewResult()
{
ViewName = "Error"
};
}
}
}
Это пример метода:
public HttpStatusCodeResult Create(Product product)
{
if (!ModelState.IsValid) return new HttpStatusCodeResult(HttpStatusCode.BadGateway);
try
{
_productService.Create(product);
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
catch (Exception) { return new HttpStatusCodeResult(HttpStatusCode.InternalServerError); }
}
Я хотел бы заменить повторяющиеся блоки try-catch на лучший код.