我的应用程序使用Forms认证,Web.Config中认证部分配置如下
<authentication mode="Forms"> <forms name="MyMVC.ASPXFORMAUTH" cookieless="UseCookies" defaultUrl="/" loginUrl="/Logon" timeout="2880"> </forms> </authentication>
在应用程序的某些Http处理程序中,如果验证用户未登录就发送401影响到客户端
/// <summary> /// 发送401响应到客户端 /// <para>未授权</para> /// </summary> public void Response401() { Response.StatusCode = 401; Response.StatusDescription = "Unauthorized"; Response.End(); }
这种方法在使用VS10的开发服务器或者iis 6部署的时候,每次调用“Response401”方法都会使客户端跳转到配置里面指定的LoginUrl,Fiddler抓包显示这个Url返回的是302,这正是我需要的。
但是在IIS7.5和IIS8Express中部署的时候,却是直接响应401.0错误代码,而客户端只接显示401.0的错误页面,而不是跳转到登录链接。
这是为何?是不是在IIS7以上的版本中部署,要做什么特殊的配置呢?如何解决?
自己解决了!
原因:
应用程序(3.5SP1)在从迁移IIS6迁移到IIS7.5+的时候导致了Forms认证失效,开始光注意到401不会跳转的问题,后来才发现原来登录都不成功。
解决办法:
在Web.Config文件的system.webServer节添加下面两句就可以了。
<remove name="FormsAuthentication" /> <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />