Я пытаюсь реализовать пользовательскую базовую аутентификацию на конкретном контроллере приложения MVC 2. В частности, я унаследовал от AuthorizeAttribute
и переопределить AuthorizeCore()
метод:
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if( doAuthorization() ) {
return true;
}
// send HTTP 401
HttpContext context = HttpContext.Current;
context.Response.StatusCode = 401;
context.Response.AddHeader( "WWW-Authenticate",
String.Format("Basic realm=\"{0}\"", myRealm);
context.Response.End();
return false;
}
и пометил контроллер моим унаследованным атрибутом.
Все работает, но всякий раз, когда AuthorizeCore
возвращает false
MVC продолжает обрабатывать запрос, и вызывается Application_Error()
, и я получаю там следующее исключение:
Server cannot set status after HTTP headers have been sent.
at System.Web.HttpResponse.set_StatusCode(Int32 value)
at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
at System.Web.Mvc.Controller.ExecuteCore()
at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__4()
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0()
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Как заставить MVC прекратить обработку запроса и предотвратить это исключение?