2009-10-30 182 views
0

我已经实现了一个抓在我的Global.asax所有类似的安全异常的方法...System.Security.SecurityException - 获取角色名称

protected void Application_Error(object sender, EventArgs e) 
    { 

     Exception err = Server.GetLastError(); 
     if (err is System.Security.SecurityException) 
      Response.Redirect("~/Error/Roles.aspx); 

    } 

有没有我可以访问属性,显示用户权限中缺少的角色名称? IE浏览器。 err.RoleThatFailed?

Manh thanks,

ETFairfax。

回答

0

您可以输出整个堆栈跟踪。

err.ToString()会告诉你更多的信息。

+0

感谢您的回复。我希望在用户看到的页面上更具体。 I.E“您没有XYZ权限”。 err.ToString()进入我的错误日志,所以我可以看到发生了什么,但用户需要看到一些更友善! – ETFairfax 2009-10-30 12:41:12

0

该角色可以在PermissionState属性中找到。该属性包含需要解析的XML。角色的名称可以在元素'Identity'中找到,该元素具有名为'Role'的属性。

Exception err = Server.GetLastError(); 
if (err is System.Security.SecurityException) 
{ 
    var xmlDocument = new XmlDocument(); 
    xmlDocument.LoadXml(err.PermissionState); 
    string roleName = xmlDocument.GetElementsByTagName("Identity")[0].Attributes["Role"].Value; 

    ... 

    Response.Redirect("~/Error/Roles.aspx);  
}