2012-02-10 2 views
2

Если я пишу ActionFilter как этотHttpContext.Current против ActionExecutingContext

public override void OnActionExecuting(ActionExecutingContext filterContext) 

в этом методе, я могу также получить доступ к текущему контексту через HttpContext.Current. Мне просто интересно, в чем разница между этими двумя контекстами?

ответ

3

С article на фильтрах:

При реализации метода OnActionExecuted, вы в конечном итоге получения экземпляра типа ResultExecutedContext. Кроме того, давая вы получите доступ к currentControllerContext, вы также получите свойства

  • Получение ActionResult (свойство Result), ответственного за генерацию ответа возвращается клиенту;

  • видение, если обработка была отменена (что происходит, если, например, вы устанавливаете свойство Result контекста ActionExecuting из метода OnActionExecuting). Вы можете получить эту информацию из свойства «Отменено»;

  • Получение ссылки на исключение, которое могло быть сгенерировано во время обработки (как и следовало ожидать, это , доступное через свойство Exception);

  • , указывающий, что вы обработали исключение (свойство ExceptionHandled).

... The ResultExecutingContext немного отличается от ActionExecutingContext мы говорили. Если вы построите один из этих фильтров, то вы можете отменить дальнейшую обработку, установив для свойства Отмена значение true из метода OnResultExecuting. Обратите внимание: , когда это произойдет, ваше представление не будет вызываться, а вы не получите , генерируя HTML-код, который обычно отправляется обратно клиенту (я , предполагая простой случай, когда у вас есть представление, которое генерирует HTML. Как и в случае , мы также увидим, что генерирует JSON ...).

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