Это возможно, используя Response.StatusCode сеттер и геттер.
Локальная обработка исключений: Для обработки исключений для локальных действий поместите код внутри вызывающего кода.
var responseCode = Response.StatusCode;
try
{
// Exception was called
}
catch (BusinessLayerException1)
{
responseCode = 201
}
catch (BusinessLayerException2)
{
responseCode = 202
}
Response.StatusCode = responseCode;
Для поперечного поведения контроллера: Вы должны следовать приведенным ниже инструкциям.
- Создать абстрактный BaseController
- Сделать текущие контроллеры наследуют от BaseController.
- Добавьте следующую логику в BaseController.
BaseController.cs
public abstract class BaseController : Controller
{
protected override void OnException(ExceptionContext filterContext)
{
var responseCode = Response.StatusCode;
var exception = filterContext.Exception;
switch (exception.GetType().ToString())
{
case "ArgumentNullException":
responseCode = 601;
break;
case "InvalidCastException":
responseCode = 602;
break;
}
Response.StatusCode = responseCode;
base.OnException(filterContext);
}
}
Примечание:
Вы также можете добавить исключение как обработанное и перенаправлять его в какой-либо другой Controller/Action
filterContext.ExceptionHandled = true;
filterContext.Result = this.RedirectToAction("Index", "Error");
Дополнительная информация относительно ASP.NET MVC Обработка ошибок можно найти HERE
Спасибо. Это имеет смысл. Один следующий вопрос: где я могу это поставить, чтобы не повторять эту логику в каждом методе API? – Sam
@Sam, Отредактированный мой код, В следующий раз, пожалуйста, укажите этот запрос в начале сообщения. –
Хороший ответ, вы заслуживаете большего количества очков, чем это. –