System.Security.CodeAccessPermission.Assert 方法

方法描述

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

语法定义(C# System.Security.CodeAccessPermission.Assert 方法 的用法)

public void Assert()

参数/返回值

参数值/返回值 参数类型/返回类型 参数描述/返回描述
返回值 void

提示和注释

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

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

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

警告

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

对继承者的说明

不能重写此方法。

System.Security.CodeAccessPermission.Assert 方法例子


异常

异常 异常描述
SecurityException
  • 调用代码没有 SecurityPermissionFlag.Assertion。
  • 当前框架已经有一个活动的 Assert。

命名空间

namespace: System.Security

程序集: mscorlib(在 mscorlib.dll 中)

版本信息

.NET Framework 受以下版本支持:4、3.5、3.0、2.0、1.1、1.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。