ASP.NET重定向到登录页,但不重定向到默认页
我有一个ASP.NET 4.5/C站点,我正在尝试做以下工作。当用户访问站点的根目录时,他们应该被重定向到Default.aspx。此页面已打开,不需要登录。如果他们想登录,此页面上有一个链接。但是,如果他们试图访问其他页面,我需要自动将他们重定向到登录。有些是向所有人开放的,有些则不是。我很喜欢通过每个页面或每个文件夹的角色分配权限。我遇到的问题是Default.aspx 如果用户通过键入:进入我的站点,那么页面将显示没有登录重定向的页面 如果用户通过键入:来我的站点,那么他们将被重定向到登录 到目前为止我的生活还不错,但是 如果用户通过键入:来我的站点,那么他们将被重定向到登录,而不仅仅是加载Default.aspx。下面是相关的web.configASP.NET重定向到登录页,但不重定向到默认页,asp.net,web-config,Asp.net,Web Config,我有一个ASP.NET 4.5/C站点,我正在尝试做以下工作。当用户访问站点的根目录时,他们应该被重定向到Default.aspx。此页面已打开,不需要登录。如果他们想登录,此页面上有一个链接。但是,如果他们试图访问其他页面,我需要自动将他们重定向到登录。有些是向所有人开放的,有些则不是。我很喜欢通过每个页面或每个文件夹的角色分配权限。我遇到的问题是Default.aspx 如果用户通过键入:进入我的站点,那么页面将显示没有登录重定向的页面 如果用户通过键入:来我的站点,那么他们将被重定向到登录
<location path="Default.aspx">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
<system.web>
<authentication mode="Forms">
<forms name=".ASPXFORMSAUTH" loginUrl="~/Login.aspx" defaultUrl="~/Default.aspx" requireSSL="false" protection="All" slidingExpiration="true" path="/" timeout="240" cookieless="UseDeviceProfile" enableCrossAppRedirects="false" />
</authentication>
<authorization>
<deny users= "?"/>
</authorization>
<system.web>
一如既往,谢谢
更新
我已将所有内容移动到3个目录中的一个:\u public、\u private、\u admin。让我们暂时不要担心管理员。下面是my web.config的设置方式:
<defaultDocument>
<files>
<clear />
<add value="~/_public/Default.aspx" />
</files>
</defaultDocument>
.
.
.
<location path="_public">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
<location path="_private">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
.
.
.
<forms name=".ASPXFORMSAUTH" loginUrl="~/_public/Login.aspx" defaultUrl="~/_private/landingPage.aspx" slidingExpiration="true" path="/" />
? 现在它告诉我没有指定默认页面
另外,关于forms标记的defaultUrl属性。这与我的登录控件的DestinationPageUrl有何关联
谢谢
更新
我将位置标记中的路径更新为“~/folder”,而不是“folder”。现在不是一个错误,而是一直把我带到登录屏幕。我在web.config的根目录中没有另一个授权标记,但我正在处理主web.config中的子文件夹,而不是在每个子文件夹中放置一个单独的文件。我建议创建一个登录页,该页将是用户键入根URL的结果
您看到的问题是,default.aspx
是IIS中根URL请求的默认文档,也是表单身份验证的defaultUrl
创建一个Landing.aspx
页面,其中包含您想要的任何消息、登录链接等
现在,将此Landing.aspx
作为IIS中的第一个默认文档(确保它位于列表中default.aspx
之前),这样根URL请求将重定向到Landing.aspx
,而根本不涉及表单身份验证
另外,在web.config
中添加
条目,以允许所有用户访问Landing.aspx
页面:
<location path="Landing.aspx">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
如果要将用户限制在文件夹中,则需要在每个文件夹中创建*web.config*s(这比在主web.config中添加所有内容要容易得多)
注意:为了获得良好的设计实践(在传统的ASP.Net中),您需要将Admin.aspx放在一个单独的文件夹中。对于需要登录的用户页面也一样。
这里有一个例子-
Main web.config
Users/web.config
拒绝匿名访问。换句话说,用户需要在访问用户文件夹中的任何页面之前登录
<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</configuration>
Admin/web.config
拒绝除管理员角色的用户以外的所有人
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<authorization>
<allow roles="Administrator" />
<deny users="*"/>
</authorization>
</system.web>
</configuration>
尝试以下操作:
创建一个文件夹,例如admin,并将Login.aspx放在那里
将身份验证设置为窗体
<authentication mode="Forms">
<forms name="HIVLogin" loginUrl="~/admin/Login.aspx" timeout="20" protection="All"/>
</authentication>
然后在system.web下
<location path="Admin">
<system.web>
<authorization>
<allow roles="Admin" />
<allow users="Admin" />
<deny users="*" />
</authorization>
</system.web>
谢谢大家的详细答复。他们都很有帮助,让我找到了更好的整体解决方案。然而,我的问题的根源是一些非常小和恼人的事情。再次查看我的默认页面:
<defaultDocument>
<files>
<clear />
<add value="~/_public/Default.aspx" />
</files>
</defaultDocument>
请注意值中的路径。我对此进行了实验,发现如果我以波浪形或正斜杠开头,这个值就会被完全忽略。一旦我将它指定为“\u public/Default.aspx”,其他的一切都正常工作了
不过我确实改变了一些事情。我使用三个子文件夹作为页面:_public、_private和_admin_public适用于任何人,_private适用于任何经过身份验证的人,_admin适用于具有特殊权限的人。我想说的是,我的网站根目录中没有任何Default.aspx文件。为了验证我在web.config中指定路径的方式是否错误,我尝试将其切换回原来的路径,但失败完全相同
我很好奇是否有人发现了这一点,你认为这是不一致的吗?在我的web.config中的大多数其他地方,我都可以通过以波浪号开头的方式从根指定路径
所以,我的网站按预期运行…匿名用户访问公共页面效果很好。点击私人或管理页面将重定向到登录。登录后,如果您试图进入特定页面,您将进入该页面……如果没有,则会通过forms标记中的defaulturl重定向您。最重要的是,当您键入没有指定页面的站点名称时,您将进入默认页面…如果不是因为语法问题,这应该是最简单的部分。原来是这样……啊 在ASP.NET中将页面设置为默认页面不需要编写任何代码。进入解决方案资源管理器,右键单击要设置为默认值的页面,然后单击设置为起始页面 您需要在部分
下添加以下映射
当您浏览根url(即www.domain.com或localhost)时,这将重定向到default.aspx
谢谢。我花了大约6个小时调试这个问题。我们的网站运行正常,突然它开始重定向到登录页面而不是默认页面(未经验证)。我们的web.config正确地包含了所有身份验证/授权设置
<authentication mode="Forms">
<forms name="MyAuth" path="/" loginUrl="login.aspx" protection="All" timeout="30" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
<system.webServer>
<defaultDocument>
<files>
<clear />
<add value="default.htm" />
</files>
</defaultDocument>
...
</system.webServer>
<location path="default.htm">
<system.web>
<authorization>
<allow users="?" />
</authorization>
</system.web>
</location>
...
SOLUTION: You need to remove Extensionless URL feature from your website. Ref: https://support.microsoft.com/en-us/help/2526854/users-may-be-redirected-to-the-login-page-of-an-asp-net-4-application
<system.webServer>
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
</handlers>
<validation validateIntegratedModeConfiguration="false" />
</system.webServer>
...
<urlMappings enabled="true">
<add url="~/" mappedUrl="~/Default.aspx" />
</urlMappings>
<authentication mode="Forms">
<forms name="MyAuth" path="/" loginUrl="login.aspx" protection="All" timeout="30" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
<system.webServer>
<defaultDocument>
<files>
<clear />
<add value="default.htm" />
</files>
</defaultDocument>
...
</system.webServer>
<location path="default.htm">
<system.web>
<authorization>
<allow users="?" />
</authorization>
</system.web>
</location>
...
SOLUTION: You need to remove Extensionless URL feature from your website. Ref: https://support.microsoft.com/en-us/help/2526854/users-may-be-redirected-to-the-login-page-of-an-asp-net-4-application
<system.webServer>
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
</handlers>
<validation validateIntegratedModeConfiguration="false" />
</system.webServer>