2012-05-19 2 views
2

Я ищу лучший подход при обработке ошибок в контроллере при возврате результата JSON.Обработка исключений в MVC JSON Controller Action

Во-первых, что было бы лучшей практикой, если я получу необработанное исключение в контроллере, и я возвращаю JSON? Я думаю, 400 или 500 ошибок? Клиент проверяет статус и делает что угодно.

Я играю с FilterAttribute и IExceptionFilter, но я не могу получить функцию OnException для вызова. Я применил атрибут к действию контроллера.

Любые идеи, почему это может не вызвать?

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = false, AllowMultiple = false)] 
public sealed class AjaxHandleErrorAttribute : FilterAttribute, IExceptionFilter 
{ 
    // This is never called !!! 
    public void OnException(ExceptionContext filterContext) 
    { 
     if (filterContext == null) 
     { 
      throw new ArgumentNullException("filterContext"); 
     } 

     if (filterContext.Exception != null 
      && !filterContext.ExceptionHandled) 
     { 
      ... 
      filterContext.HttpContext.Response.StatusCode = 400; 
      filterContext.HttpContext.Response.StatusDescription = "Error processing     request"; 
      ... 
     } 
    } 
} 

public class MyController : Controller 
{ 
    public MyController(IMyRepository repo) 
    { 
     ... 
    } 

    [AjaxHandleError] 
    public ActionResult GetSomeJson(int anId) 
    { 
     throw new System.Exception(); 
    } 
} 

ответ

0

Вы должны украсить ваш контроллер с этим атрибутом или в вашем Global.asax.cs вам нужно добавить

public static void RegisterGlobalFilters(GlobalFilterCollection filters) { 
    filters.Add(new AjaxHandleErrorAttribute()); 
} 

и ваш метод OnException будет называться.

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