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

时间:2014-11-25 12:58:52

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

我在WebApi控制器类上有以下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是一个密封类,所以我不能继承它。

2 个答案:

答案 0 :(得分:1)

我最终通过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
{

答案 1 :(得分:0)

System.Configuration.ConfigurationManager.ConnectionStrings["ModellingApiUrl"].ToString();

使用此代码我希望这对您有用