asp.net-mvc – Asp.net mvc 2 – 从ActionFilter重定向错误?
发布时间:2020-12-16 09:31:14 所属栏目:asp.Net 来源:网络整理
导读:从mvc1和mvc2改变了什么?如果用户未经过身份验证,我有以下代码重定向到登录页面.这不适用于mvc2并导致“System.Web.HttpException:在发送HTTP标头后无法重定向” public class RequiresAuthenticationAttribute : FilterAttribute,IAuthorizationFilter{ p
从mvc1和mvc2改变了什么?如果用户未经过身份验证,我有以下代码重定向到登录页面.这不适用于mvc2并导致“System.Web.HttpException:在发送HTTP标头后无法重定向”
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) 解决方法
您所要做的就是覆盖HandleUnauthorizedRequest而不是OnAuthorization,只需将RedirectResult url分配给AuthorizationContext.Result即可.
base.OnAuthorization将检查身份验证,如果失败则调用HandleUnauthorizedRequest. protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { string redirectOnSuccess = filterContext.HttpContext.Request.Url.AbsolutePath; string redirectUrl = string.Format("?ReturnUrl={0}",redirectOnSuccess); filterContext.Result = new RedirectResult(redirectUrl); return; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 设计模式 – 如何在自己的应用程序域中分离webapi控制器?
- asp.net-mvc-4 – 为什么一些Asp.Net MVC4模板需要System.S
- asp.net – 在Web部署之外应用Web.Config转换
- ASP.NET / VB中的jsFiddle是否相当?
- 七步学会ASP.NET Core 2.0怎么发布\/部署到Ubuntu Linu
- asp.netcore 3.0 Docker Nginx(震惊,原来docker是这样的!
- 在netcore中实现字段和属性注入
- asp.net – 使用X-Forwarded-For Windows Filter for Windo
- asp.net – 访问.NET中的Web服务中的查询字符串(GET请求数组
- asp.net-mvc – 如何在ASP.NET Razor MVC4视图中使用LINQ?