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/重定向授權失敗的正確方法是在'web.config'中設置URI。 – 2009-12-16 17:51:47
該網站最初是在創建AuthorizeAttribute之前,在mvc1預覽版2的附近編寫的。在這個問題出現之前,我真的不知道這個屬性是存在的。我會看看它是否能解決我需要的東西。 – 2009-12-16 20:10:37