HttpContext.Current против ActionExecutingContext - PullRequest
2 голосов
/ 11 февраля 2012

Если я пишу ActionFilter как этот

public override void OnActionExecuting(ActionExecutingContext filterContext)

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

1 Ответ

3 голосов
/ 11 февраля 2012

Из статьи о фильтрах:

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

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

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

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

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

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

...