【问题标题】:Allowing anonymous access to default page允许匿名访问默认页面
【发布时间】:2011-05-06 20:35:03
【问题描述】:

我的 ASP.NET Forms 4.0 站点正在使用表单身份验证运行。默认情况下,未经授权的用户被拒绝,然后我允许访问某些页面。 我在允许访问默认 url: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>

当我转到完整的 url:http://example.com/default.aspx 时,它可以正常工作,但如果我转到 http://example.com,则会重定向到登录页面

任何想法我做错了什么?

【问题讨论】:

  • 我知道你做错了什么 - path 匹配请求的路径,而不是它被重定向到的路径(在服务器端),所以 mysite.com 不匹配默认值.aspx。不过,我不能帮你解决它:(
  • 请参阅我关于删除 ExtensionlessUrl 模块的回答 Forms Authentication Ignoring Default Document:

标签: asp.net forms-authentication


【解决方案1】:

我刚刚在 SO:Forms Authentication Ignoring Default Document:

在 Global.asax 中,方法:Application_BeginRequest,放置以下内容:

if (Request.AppRelativeCurrentExecutionFilePath == "~/")
    HttpContext.Current.RewritePath("default.aspx");

像魅力一样工作!

【讨论】:

  • 你帮我省了很多麻烦......是的,现在是 2015 年,我仍在使用网络表单。谢谢!
【解决方案2】:

我刚刚想出了如何解决这个问题,而不必捏造重定向。

如果我在从 .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="/" />

你现在应该没问题了,只是在两个不同的网站上试了一下,它对我有用

【讨论】:

  • 不是真正的解决方案。您刚刚将身份验证 URL (login.aspx) 更改为您的根。现在可能会给你一个解决方案......但我强烈反对它。
【解决方案3】:

我不喜欢为这个问题更改代码,尤其是因为我的网站在我的 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 功能,这对您不起作用,但我已在此处为那些迁移旧站点并想知道突然出了什么问题的人记录了它。

【讨论】:

    【解决方案4】:

    这适用于测试网络应用程序:

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

    【讨论】:

    • @Josh - 你可以删除你的答案,以免误导他人吗?我不想投反对票:)
    • 这没有帮助 - 你仍然需要以某种方式允许匿名访问 / 路由 - 我已经尝试过了:(
    • 抱歉没有帮助 - 试试我目前的答案。
    • 这只会在您有重复条目或另一个没有定义路径属性的条目时引发错误。但是,它也没有达到使默认页面向公众开放的预期效果。
    猜你喜欢
    • 2015-08-30
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    相关资源
    最近更新 更多