允许匿名访问默认页面

时间:2011-05-06 20:35:04

标签: asp.net forms-authentication

我的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

,则会重定向到登录页面

任何想法我做错了什么?

4 个答案:

答案 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)。