我的ASP.NET Forms 4.0网站正在运行表单身份验证。默认情况下,未授权用户被拒绝,然后我允许访问某些页面。 我在访问默认网址时遇到问题:http:/example.com。我在web.config中有这个条目,它定义了默认页面:
<defaultDocument>
<files>
<clear/>
<add value="default.aspx" />
</files>
</defaultDocument>
我有这个位置覆盖:
<location path="default.aspx">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
当我转到完整网址时,它可以正常工作:http://example.com/default.aspx,但如果我转到http://example.com
,则会重定向到登录页面任何想法我做错了什么?
答案 0 :(得分:11)
我刚刚在答案中(由德米特里发现)在SO中找到类似问题的回答:Forms Authentication Ignoring Default Document:
在Global.asax中,方法:Application_BeginRequest,放置以下内容:
if (Request.AppRelativeCurrentExecutionFilePath == "~/")
HttpContext.Current.RewritePath("default.aspx");
像魅力一样工作!
答案 1 :(得分:3)
我刚刚想出如何在不必捏造重定向的情况下解决这个问题。
如果从.Net 2转换为.Net 4后发生在我身上,我从来没有在互联网上的任何地方找到我的解决方案,所以就这样了。
如果像我一样,您的登录页面也是您的默认页面,您需要确保在web.config文件中执行以下两项操作
添加此项以免除默认身份验证中的default.aspx(在.Net 2中不需要此内容)
<location path="default.aspx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
并从此
更改登录网址<forms name="myform" loginUrl="~/default.aspx" timeout="240" defaultUrl="~/home.aspx" slidingExpiration="true" protection="All" path="/" />
到这个
<forms name="myform" loginUrl="~/" timeout="240" defaultUrl="~/home.aspx" slidingExpiration="true" protection="All" path="/" />
你应该把所有的工作都弄好了,只是在两个不同的网站上尝试过,它为我做了诀窍
答案 2 :(得分:1)
我不喜欢为此问题进行代码更改,特别是因为我的网站在我的Windows Server 2008 R2计算机上工作正常,但在我的Windows 7 SP1开发计算机上没有。
事实证明,此问题的根本原因是Windows 7 Service Pack 1中的更新:
http://support.microsoft.com/kb/2526854
解决方案似乎是禁用SP1中添加的新“ExtensionlessUrl”功能:
<system.webServer>
<handlers>
<remove name="ExtensionlessUrl-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrl-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrl-Integrated-4.0" />
</handlers>
<validation validateIntegratedModeConfiguration="false" />
</system.webServer>
显然,如果你使用的是ExtensionlessUrl
功能,这对你不起作用,但我在这里为那些迁移旧网站的人记录了它,并且想知道突然出现了什么。
答案 3 :(得分:-3)
这适用于测试网络应用程序:
<location path="">
<system.web>
<authorization>
<deny users="*"/>
</authorization>
</system.web>
</location>
<location path="Default.aspx">
<system.web>
<authorization>
<deny users="*"/>
</authorization>
</system.web>
</location>
现在我无法访问“/”或“/Default.aspx” - 尝试一下(但请改用allow
)。