CodeAccessPermission.Assert 方法

声明调用代码能够通过调用此方法的代码,访问受权限请求保护的资源,即使堆栈上部的调用方未被授予访问该资源的权限。使用 Assert 会引起安全问题。

**命名空间:**System.Security
**程序集:**mscorlib(在 mscorlib.dll 中)

语法

声明
Public Sub Assert
用法
Dim instance As CodeAccessPermission

instance.Assert
public void Assert ()
public:
virtual void Assert () sealed
public final void Assert ()
public final function Assert ()

异常

异常类型 条件

SecurityException

调用代码没有 SecurityPermissionFlag.Assertion

- 或 -

当前框架已经有一个活动的 Assert

备注

调用堆栈一般表示为缩小,以便调用堆栈中较高的方法可调用调用堆栈中较低的方法。调用 Assert 就能防止调用堆栈中从较低位置开始的堆栈遍历沿着调用堆栈向上超出调用此方法的代码。因此,即使调用堆栈中处于较高位置的调用方没有访问某个资源所需的权限,它们仍可以通过在所需权限上调用此方法的代码来访问该资源。仅当调用 Assert 的代码通过对它所断言的权限的安全性检查时,断言才有效。

在调用代码返回到它的调用方之前,对 Assert 的调用一直有效。一个帧上只能有一个活动的 Assert。如果试图在帧上存在活动 Assert 时调用 Assert,则会导致 SecurityException。调用 RevertAssertRevertAll 以移除活动的 Assert

对未授予的权限忽略 Assert,因为对该权限的请求不会成功。但是,如果调用堆栈上的低级代码对该权限调用 Demand,则当堆栈遍历到达曾试图调用 Assert 的代码时将引发 SecurityException。发生这种情况是因为调用 Assert 的代码未被授予权限,即使该代码曾试图 Assert 它。

警告

鉴于调用 Assert 不要求调用链中的所有代码必须被授予访问指定资源的权限,如果使用错误或使用不当,就会暴露安全问题。因此,使用它时应格外小心。

给继承者的说明 不能重写此方法。

.NET Framework 安全性

  • SecurityPermission  用于授予调用 Assert 的能力。关联的枚举:SecurityPermissionFlag.Assertion

平台

Windows 98、Windows 2000 SP4、Windows Millennium Edition、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

请参见

参考

CodeAccessPermission 类
CodeAccessPermission 成员
System.Security 命名空间

其他资源

使用 Assert 方法
重写安全检查