C# 在ASP.NET中以编程方式获取旧CAS模型值
我使用VS 2012和ASP.NET 4.5 我如何知道在C#(在ASP.NET 2.0-CLR 2.0和ASP.NET 4.5(CLR 4.0)中执行我的代码)中是否以编程方式启用了传统CAS模型C# 在ASP.NET中以编程方式获取旧CAS模型值,c#,asp.net,asp.net-4.5,code-access-security,C#,Asp.net,Asp.net 4.5,Code Access Security,我使用VS 2012和ASP.NET 4.5 我如何知道在C#(在ASP.NET 2.0-CLR 2.0和ASP.NET 4.5(CLR 4.0)中执行我的代码)中是否以编程方式启用了传统CAS模型,以及哪个级别 <system.web> <trust legacyCasModel="true" level="Full"/> </system.web> <runtime> <NetFx40_LegacySecur
,以及哪个级别
<system.web>
<trust legacyCasModel="true" level="Full"/>
</system.web>
<runtime>
<NetFx40_LegacySecurityPolicy enabled="true"/>
</runtime>
您可以通过web应用程序中的以下代码阅读它(我已经在.Net 4.7.1和VS 2017中对其进行了测试):
对于控制台应用程序,我只找到了这种方法(我相信这并不完美):
注意:我假设您以以下方式启用了CAS策略,如果您使用NetFx40_LegacySecurityPolicy
标记对其进行了设置,则可以分别更改代码)
没有用于检索此信息的公共API,但有一些变通方法。如果你能描述一下你打算如何使用这些信息,那么建议一个合适的方法就更容易了。此外,“级别”(例如:策略级别、透明度级别等)的确切含义是什么?级别值,如Full
Full“类型”级别实际上只有两个指定的选项:完全信任或部分信任。这就是你的意思吗?此外,您还没有描述一旦获得了这些信息,您将如何处理这些信息……诊断原因,请了解网站是否具有legacyCasModel
using System.Web.Configuration;
var trustsection = ((System.Web.Configuration.TrustSection)
WebConfigurationManager.GetSection("system.web/trust"));
bool isLegacyCasModel = trustsection.LegacyCasModel;
string level = trustsection.Level;
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<legacyCasPolicy enabled="true" />
</runtime>
</configuration>
var xml = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).GetSection("runtime").SectionInformation.GetRawXml();
var doc = new XmlDocument();
doc.LoadXml(xml);
bool isCasMode = doc.GetElementsByTagName("legacyCasPolicy")?[0]?.Attributes?["enabled"]?.Value == "true";