Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# asp.net中基于角色的授权_C#_Asp.net_Roles - Fatal编程技术网

C# asp.net中基于角色的授权

C# asp.net中基于角色的授权,c#,asp.net,roles,C#,Asp.net,Roles,我正在一个现有的网站上工作。我目前正在为该网站进行基于角色的授权。我在web.config中给出了以下内容: <system.web> <authentication mode="Forms"> <forms name=".ASPXFORMSAUTH" loginUrl="Login.aspx" requireSSL="false" protection="All" slidingExpiration="true" path="/" timeout="240" c

我正在一个现有的网站上工作。我目前正在为该网站进行基于角色的授权。我在web.config中给出了以下内容:

<system.web>
<authentication mode="Forms">
<forms name=".ASPXFORMSAUTH" loginUrl="Login.aspx" requireSSL="false" protection="All" slidingExpiration="true" path="/" timeout="240"  cookieless="UseDeviceProfile" enableCrossAppRedirects="false" />
</authentication>
<authorization>
<deny users="?"/>
</authorization>
</system.web>

<location path="Admin">
<system.web>

  <authorization>
    <allow roles="Admin"/>

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

</system.web>
</location>
这就是我登录的方式:

if (Roles.IsUserInRole(TextBox1.Text,"Admin"))
{
//Code to validate password
Response.Redirect("./Admin/AdminHome.aspx");
}
但是重定向不起作用。我只显示了管理员的代码,还有其他角色。当我单击“登录”按钮时,url会发生变化,就好像登录无效一样,并停留在登录页面上。如果我缺少任何基于角色的授权,请提供帮助


编辑:我删除了整个代码的bug,代码在Respsonse.Redirect处停止。问题的原因是web.config。为每个文件夹使用web.config是否更好?

在重定向逻辑之前,可能需要添加以下行

Response.BufferOutput = true;

我在这方面做了更多的工作。问题可能出在Response.Redirect()上。此语法不设置身份验证cookie,因此当它看到已启用身份验证时,返回到身份验证页面。两种方法:

  • 在身份验证标记中使用defaulturl并重定向到空页面。在页面加载时,根据角色将该空页面重定向到不同的页面
  • 重定向前使用formsauthentication.setauthcookie(用户,bool变量)
    谢谢大家的努力

    使用表单身份验证时手动登录用户。使用

    例如:

    string username = UsernameTB.Text;
    FormsAuthentication.SetAuthCookie(username, false);
    

    在他们登录后,您可以重定向到最初请求的页面或登录页面(取决于他们到达登录页面的方式)。你用这个。这将向客户机发送HTTP重定向,告诉他们请求不同的页面。一旦
    Response.Redirect()
    完成,当前执行将以
    ThreadAbortException
    结束(这是正常的)。

    我已编辑了问题。你能告诉我编辑的部分是否有效吗?@Partha我个人认为你的web.config没有任何问题。您是否尝试添加
    return
    以查看这是否会强制该方法退出,就像有人在这个答案中尝试的那样?Response.Redirect()所做的唯一事情就是向客户端发送HTTP重定向。当前请求在该点结束。是。我错过了,也不知道出了什么问题。然后我读了更多关于身份验证的内容,得出了这个结论。Jus为那些可能错过这个小细节的人添加了这个。在“这就是我如何登录”之后的代码实际上并没有让任何人登录。不是用于登录某人的正确代码。哦。所以我补充的答案不是正确的方法?是否有任何链接可以共享?不需要空白页。我补充了一个更简洁的答案。是的,我也提到了你的答案。那一页是我别无选择的时候。然后今天得到了这个。无论如何,非常感谢!!!
    string username = UsernameTB.Text;
    FormsAuthentication.SetAuthCookie(username, false);