有没有办法找出一个调用者是否高度信任没有可能引发异常?
问题描述:
以下代码有效,但它使用了一个安全需求,在我的应用程序中,这通常会导致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);
答
为什么不只是在静态初始化程序中计算一次值并存储结果呢?
.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;
}
}
任何理由下来票呢? – 2009-07-17 20:23:38