.net - 如何从类属性中访问 web.config 值?

标签 .net c#-4.0 cors asp.net-web-api custom-attributes

我在 WebApi Controller 类上有以下 EnableCors 属性:

[EnableCors(origins:"http://localhost:57280", headers: "*", methods: "*")]
public class PhysicalActivityController : ApiController

但我不希望该网址被硬编码。我想从 web.config 获取它。

类似这样的事情:

[EnableCors(origins: System.Web.Configuration.WebConfigurationManager.AppSettings["ModellingApiUrl"], headers: "*", methods: "*")]
public class PhysicalActivityController2 : ApiController

问题是我无法从属性中访问类似的方法。代码的上下文与普通方法中的上下文不同。当我按照第二个示例编写代码时,Visual Studio 以红色突出显示“AppSettings”,并给出错误“无法解析符号“AppSettings””。

关于如何实现这一目标有什么想法吗?我尝试编写一个继承自 EnableCors 的自定义属性,但遗憾的是 System.Web.Http.Cors.EnableCorsAttribute 是一个密封类,因此我无法继承它。

最佳答案

我最终通过批量复制 EnableCors 属性的代码解决了这个问题,然后修改它以从配置中获取值。

问题是传递给属性的字符串是其构造函数的参数,并且需要是编译时常量。因此,我不相信我想做的事情是可能的 - 您必须编辑属性后面的代码。

我的解决方案:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)]
[SuppressMessage("Microsoft.Design", "CA1019:DefineAccessorsForAttributeArguments", Justification = "Attribute arguments are accessible as collections.")]
public sealed class EnableCorsUsingConfigAttribute : Attribute, ICorsPolicyProvider
{        
    public EnableCorsUsingConfigAttribute(string configKeyForOrigins, string headers, string methods)
        : this(configKeyForOrigins, headers, methods, null)
    {
    }

    public EnableCorsUsingConfigAttribute(string configKeyForOrigins, string headers, string methods, string exposedHeaders)
    {
        string origins = System.Web.Configuration.WebConfigurationManager.AppSettings[configKeyForOrigins];

(其余代码是EnableCors属性的直接副本)

用法:

[EnableCorsUsingConfig(configKeyForOrigins: "ModellingApiClientUrls", headers: "*", methods: "*")]
public class PhysicalActivityController : ApiController
{

关于.net - 如何从类属性中访问 web.config 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27127449/

相关文章:

.net - 根据 ASP.NET MVC 中的 Controller 属性向 View 模型添加错误消息

c# - .net 6 属性路由返回 404

java - C#/dot Net 和 Java 之间的 GZIP 输出和大小

.net - 如何在wpf文本框中自动化数字格式

ruby-on-rails - S3 跨域资源共享不起作用

c# - 请求的资源上不存在 'Access-Control-Allow-Origin' header 。因此不允许访问 Origin 'http://www.sitename.com,'

typescript - 使用 Aurelia 的 Fetch Client 时 Azure Translator API(认知服务)上出现 CORS 错误

.net - 无法从程序集 'mscorlib 加载类型 'System.Runtime.CompilerServices.ExtensionAttribute'

wpf - 以编程方式控制在 XAML 标记中声明的 Storyboard

asp.net-mvc-3 - 如何打印未映射的值