我有一个需要用户登录的webapp运行。 Webconfig:
if (checkCredentials.searchCredentials(attemptedName, passwordBox.Text) != null)
{
FormsAuthentication.RedirectFromLoginPage(attemptedName,false);
}
在login.aspx页面中(加倍检查名称)在使用我自己的数据库验证用户凭据后,我有以下逻辑:
<style type="text/css">
html, body{
width: 100%;
height: 100%;
}
.Movable{
height: 100px;
position: absolute;
width: 100px;
}
.black{
background-color: black;
}
.gray{
background-color: gray;
}
.wheat{
background-color: lightgray;
}
我知道if语句有效,就像我之前用于登录的方法一样。
但是,当我运行应用程序时,登录页面会立即打开,并显示错误401.2。非常感谢帮助:)
答案 0 :(得分:5)
我发布了另一个答案,因为它处理了使用Visual Studio 2017和表单身份验证的典型问题,并且是我之前回答的替代方法。
Visual Studio 2017将自动将名为Microsoft.AspNet.FriendlyUrls
的NuGet包添加到您的网站或Web应用程序项目中。由于这个包,表单身份验证将无法工作,甚至登录页面也不会呈现多次。
RouteConfig.RegisterRoutes(RouteTable.Routes);
。如果您使用此方法,您的网站将失去friendlyUrls的好处。但是,下面两个不同的配置中提到了第三种解决方案;你可以使用它们中的任何一个。
CONFIGURATION 1从login和defaultUrl中删除了aspx扩展名 值。
CONFIGURATION 2保留了aspx扩展,但增加了特殊访问权限 对应于login.aspx的freindlyurl的权限。
(访问权限中的?
表示所有未经身份验证的用户,*
表示所有用户,即经过身份验证的+未经身份验证的用户)
注意:我已经尝试并测试了这个解决方案。
使用友好网址时的表单身份验证配置配置1
<authentication mode="Forms">
<forms loginUrl="login" defaultUrl="home"
slidingExpiration="true" timeout="20" name=".Auth" protection="All">
</forms>
</authentication>
使用友好网址时表单身份验证配置的配置2
<system.web>
<!--keep the aspx extensions for login and default pages-->
<authentication mode="Forms">
<forms loginUrl="login.aspx" defaultUrl="home.aspx"
slidingExpiration="true" timeout="20" name=".Auth" protection="All">
</forms>
</authentication>
</system.web>
<!-- add access permissions for friendly url corresponding to login.aspx-->
<location path="login">
<system.web>
<authorization>
<allow users="?" />
<deny users="*" />
</authorization>
</system.web>
</location>
</configuration>
答案 1 :(得分:1)
由于您使用的是Visual Studio 2017,因此首先需要检查的是Microsoft.AspNet.FriendlyUrls package
是否包含在内。完成以下步骤。
RouteConfig.RegisterRoutes(RouteTable.Routes);
并立即尝试您的信息页。但是,请确保在浏览器中清除缓存,否则此URL的旧缓存版本将显示401.2错误。 以下是您需要确保的其他一些事项。
尝试将网络配置中的表单标记更改为以下内容。根据您的要求更改defaultUrl和timeout的值。
<authentication mode="Forms">
<forms loginUrl="login.aspx" defaultUrl="home.aspx"
slidingExpiration="true" timeout="20" name=".Auth" protection="All">
</forms>
</authentication>
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
此外,您的C#代码必须在登录按钮单击事件中;如果它在其他任何地方,那么你也可以看到问题。
允许所有未经身份验证的用户使用Login.aspx。在Web配置文件末尾的</configuration>
之前添加此配置。如果该页面位于root的安全文件夹下,则输入Login.aspx的路径(如果它不在Security/login.aaspx
之类的根目录中。
<location path="Login.aspx">
<system.web>
<authorization>
<allow users="?" />
<deny users="*" />
</authorization>
</system.web>
</location>
转到“控制面板”&gt;打开IIS管理控制台。管理工具&gt; Internet信息服务经理。然后,展开网站节点并选择您正在使用的网站。现在双击右窗格中的身份验证,并确保启用匿名和表单身份验证,并禁用其他选项,如以下屏幕截图所示:Security settings in IIS website