mvc1 및 mvc2에서 변경된 내용은 무엇입니까? 다음 코드는 사용자가 인증되지 않은 경우 로그인 페이지로 리디렉션됩니다. 이에 MVC2 결과 작동하지 않습니다 "System.Web.HttpException : HTTP 헤더 후 리디렉션 할 수 없습니다 보냈습니다"Asp.net mvc 2 - ActionFilter에서 리디렉션 중 오류가 발생 했습니까?
public class RequiresAuthenticationAttribute : FilterAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
string redirectOnSuccess = filterContext.HttpContext.Request.Url.AbsolutePath;
string redirectUrl = string.Format("?ReturnUrl={0}", redirectOnSuccess);
string loginUrl = System.Web.Security.FormsAuthentication.LoginUrl + redirectUrl;
filterContext.HttpContext.Response.Redirect(loginUrl, true);
}
}
}
스택 추적은 다음과 같이
System.Web.HttpException: Cannot redirect after HTTP headers have been sent.
at System.Web.HttpResponse.Redirect(String url, Boolean endResponse)
at System.Web.HttpResponseWrapper.Redirect(String url, Boolean endResponse)
at System.Web.Mvc.RedirectResult.ExecuteResult(ControllerContext context)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass14.<InvokeActionResultWithFilters>b__11()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass14.<>c__DisplayClass16.<InvokeActionResultWithFilters>b__13()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult)
at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
일반적으로 'OnAuthorization'에서는 리디렉션하지 않습니다. ASP.NET은 이미이를 지원합니다. 그러나 MVC는 이미 사용하거나 작성하고자하는 제공자와 함께 이미 승인을 처리합니다. *** 당신이 무엇을해야 할지를 말하기는 어렵습니다. 일반적으로 개발자는 ASP.NET 인증을 다시 작성하기를 열망하고 잘못 처리하는 경향이 있다고 생각합니다. http://blogs.teamb.com/craigstuntz/2009/09/09/38390/ 인증 실패시 리디렉션하는 올바른 방법은 URI를'web.config'에 설정하는 것입니다. –
이 사이트는 원래 AuthorizeAttribute가 만들어지기 전에 mvc1 미리보기 2에서 작성되었습니다. 솔직히이 문제가 발생할 때까지 속성이 존재한다는 사실을 알지 못했습니다. 나는 내가 원하는 것을 해결하는지 살펴볼 것입니다. –