有没有办法动态更改FormsAuthentication的LoginUrl?我所拥有的是由FormsAuth保护的整个站点,但是对于子文件夹中的某些页面,我想将用户带到不同的登录页面,并且具有FormsAuth处理ReturnUrl的东西.是否可能,或者我必须为子文件夹案例编写自己的重定向代码?
这是一个示例布局:
~/logon1.aspx ~/Protected1.aspx ~/Protected2.aspx ~/Subfolder/ ~/Subfolder/logon2.aspx ~/Subfolder/NotProtected.aspx ~/Subfolder/Protected3.aspx
所以我的web.config看起来像:
<forms loginUrl="~/Splash.aspx" ... />
所有受保护的* .aspx页面都有
<deny users="?">
我想要的是,如果用户是匿名的,将〜/ Subfolder / Protected3.aspx重定向到〜/ Subfolder / logon2.aspx.
我试过在〜/ Subfolder / web.config中放置一个被删除的web.config版本:
<?xml version="1.0"?> <configuration> <system.web> <authentication mode="Forms"> <forms loginUrl="~/Subfolder/logon.aspx" name="SiteAuth" protection="All" timeout="30" path="/" defaultUrl="~/Subfolder/default.aspx" requireSSL="true" cookieless="UseCookies" enableCrossAppRedirects="false" /> </authentication> <authorization> <deny users="?" /> </authorization> </system.web> </configuration>
但是所有这些都是我的错误:
It is an error to use a section
registered as
allowDefinition=’MachineToApplication’
beyond application level. This error
can be caused by a virtual directory
not being configured as an application
in IIS.
我认为使这个子文件夹应用程序在这一点上会产生更多的问题,但也许我错了.如果是一个应用程序,不会将〜/ Subfolder中的所有代码与父应用程序的其余部分分开?
解决方法
您所遇到的问题是
Forms element仅在应用程序级别允许 – 您无法在子web.config中定义它.
不幸的是,您也无法使用Location element定义它,而FormsAuthentication.LoginUrl属性是只读的.
狩猎一下,看起来你最好的打赌是在您的登录页面上有一些代码可以检测用户从哪里到达(即通过检查“ReturnUrl”查询字符串的值)并重定向到您的其他登录页面如果他们来自子目录.不过,我承认,如果您想为多个子目录定制登录页面,这一切都不会很好地扩展. 原文链接:https://www.f2er.com/aspnet/250829.html