有没有办法找出一个调用者是否高度信任没有可能引发异常?

问题描述:

以下代码有效,但它使用了一个安全需求,在我的应用程序中,这通常会导致SecurityException被抛出。正如你所看到的代码处理这一点很好,但我想尽可能加快速度。任何有关如何改善事情的建议将不胜感激!有没有办法找出一个调用者是否高度信任没有可能引发异常?

using System.Security; 
using System.Web; 

namespace MyProject 
{ 
    internal static class TrustHelper 
    { 
     public static bool IsHighlyTrusted() 
     { 
      try 
      { 
       AspNetHostingPermission permission = 
        new AspNetHostingPermission(
         AspNetHostingPermissionLevel.High); 

       permission.Demand(); 

       return true; 
      } 
      catch (SecurityException) 
      { 
       return false; 
      } 
     } 
    } 
} 

使用SecurityManager ...

var perm = new AspNetHostingPermission(AspNetHostingPermissionLevel.High); 
var hasPerm = System.Security.SecurityManager.IsGranted(perm); 
+0

任何理由下来票呢? – 2009-07-17 20:23:38

为什么不只是在静态初始化程序中计算一次值并存储结果呢?

.NET中的安全“证据”在程序集加载时收集,并用于确定权限。因此,权限在程序集的生命周期中不会更改,并且可以在启动时确定。

internal static class TrustHelper 
{ 
    static TrustHelper() 
    { 
     try 
     { 
      var permission = new AspNetHostingPermission(
       AspNetHostingPermissionLevel.High); 
      permission.Demand(); 

      TrustHelper.IsHighlyTrusted = true; 
     } 
     catch (SecurityException) 
     { 
      TrustHelper.IsHighlyTrusted = false; 
     } 
    } 

    public static bool IsHighlyTrusted() 
    { 
     get; 
     private set; 
    } 
}