ASP.NET WebForms Url授权和无限循环.Web.config不起作用

本文关键字:无限循环 Web config 不起作用 授权 NET WebForms Url ASP | 更新日期: 2023-09-27 17:58:59

我创建了一个使用ASP.NET Identity实现用户帐户功能的网站。我想使用标准url授权限制对特定文件夹("帐户")中除"登录"answers"注册"之外的所有页面的访问。未登录的用户应该只能打开"帐户/登录"answers"帐户/注册",而那些经过身份验证的用户应该能够打开除这些页面之外的所有其他页面。

根Web.config没有授权规则,我放在Account文件夹中的Web.config具有以下内容:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <authorization>
      <deny users="?"/>
    </authorization>
  </system.web>
  <location path="Login.aspx">
    <system.web>
      <authorization>
        <allow users="?"/>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>
  <location path="Register.aspx">
    <system.web>
      <authorization>
        <allow users="?"/>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>
</configuration>

然而,有了这些规则,就出现了一个问题。请求该文件夹中的任何页面,包括"Login.aspx",都会导致重定向到http://localhost:15284/Account/Login。正如我所说,即使请求"登录"页面也会重定向回自己,就像不允许用户一样,因此会创建一个无限循环。该循环导致HTTP 404.15,因为查询字符串超过了其长度限制(每次重定向时都会将"?ReturnUrl=%2FAccount%2FLogin"附加到URL)。

是我的规则不正确,还是这是其他原因?也许问题在某种程度上与ASP.NET标识有关?或者这可能是因为url重写(在VS2013WebForms模板中默认启用)?

如果没有Web.config,网站当然可以工作,但每个人都可以访问一切,这并不是我真正想要的。

提前谢谢,对不起我的英语!:)

ASP.NET WebForms Url授权和无限循环.Web.config不起作用

尝试

<location path="Login.aspx">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>

这应该允许访问未经身份验证的用户

使用文件夹"account",或创建另一个文件夹,其中可以插入您希望匿名用户访问的页面,其所有者web.config包含以下配置:

<configuration>
    <system.web>
        <authorization>
            <allow users="?"/>
        </authorization>
    </system.web>
</configuration>

如您所见,无需使用"位置"标签

    <location path="Login.aspx">

而在根web.config中,它仍然是这样的:

<authorization>
    <deny users="?"/>
</authorization> 

这是一个变通方法,因为如本文所述:http://msdn.microsoft.com/en-us/library/wce3kxhd.aspx"应用程序级配置文件中包含的规则优先于继承的规则。系统通过为URL构建一个所有规则的合并列表来确定哪个规则优先,最新的规则(层次结构中最接近的规则)位于列表"

这是一个有点旧的线程,但我希望这能有所帮助,至少对某些人有帮助。重定向到/Account/Login来自Startup.cs,默认情况下如下:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/Account/Login")
        });            
    }
}

因此,将LoginPath = new PathString("/Account/Login")替换为您的登录路径。

我为同样的问题挣扎了一段时间,但现在它起作用了。。