【问题标题】:Get legacy CAS Model value programmatically in ASP.NET在 ASP.NET 中以编程方式获取旧 CAS 模型值
【发布时间】:2015-11-24 22:45:39
【问题描述】:

我使用 VS 2012 和 ASP.NET 4.5。

我怎么知道 legacy CAS model 是否在 C# 中启用programmatically(在 ASP.NET 2.0 - CLR 2.0 和 ASP.NET 4.5 中执行我的代码(CLR 4.0)?以及哪个级别

<system.web>

    <trust legacyCasModel="true" level="Full"/>

  </system.web>

 <runtime>

    <NetFx40_LegacySecurityPolicy enabled="true"/>

  </runtime>

【问题讨论】:

  • 虽然有一些变通方法,但没有用于检索此信息的公共 API。如果您可以描述您计划如何使用这些信息,那么建议一种适当的方法会更容易。另外,您所说的“级别”到底是什么意思(例如:政策级别、透明度级别等)?
  • level 值,例如 Full
  • “完整”类型“级别”实际上只有两个命名替代方案:完全信任或部分信任。你是这个意思吗?此外,你还没有描述一旦你有了这些信息你想做什么......
  • 诊断原因,了解网站是否有 legacyCasModel

标签: c# asp.net asp.net-4.5 code-access-security


【解决方案1】:

您可以在 web 应用程序中通过以下代码阅读它(我已在 .Net 4.7.1 和 VS 2017 中测试过):

using System.Web.Configuration;

var trustsection = ((System.Web.Configuration.TrustSection)
                   WebConfigurationManager.GetSection("system.web/trust"));

bool isLegacyCasModel = trustsection.LegacyCasModel;
string level = trustsection.Level; 

对于 console 应用程序,我只发现了这种方式(我相信这不是完美的):

注意:我假设您通过以下方式启用了CAS策略,如果您使用NetFx40_LegacySecurityPolicy标签设置了它,您可以分别更改代码)

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>    
    <legacyCasPolicy enabled="true" />
  </runtime>
</configuration>

所以c#代码将是:

    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";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    相关资源
    最近更新 更多