.net 如何从类属性中访问web.config值?
我在WebApi控制器类上具有以下EnableCors属性:.net 如何从类属性中访问web.config值?,.net,c#-4.0,cors,asp.net-web-api,custom-attributes,.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.WebC
[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
问题是我无法从属性中访问类似的方法。代码的上下文与普通方法中的上下文不同。当我像第二个示例那样编写代码时,VisualStudio以红色突出显示“AppSettings”,并给出错误“无法解析符号'AppSettings'”
有什么办法可以做到这一点吗?我尝试编写一个从EnableCors继承的自定义属性,但遗憾的是System.Web.Http.Cors.EnableCorsAttribute是一个密封的类,所以我无法从它继承
System.Configuration.ConfigurationManager.ConnectionStrings["ModellingApiUrl"].ToString();
使用此代码我希望这对您有用我最终解决了这个问题,为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
{
遗憾的是,那也不行。问题是当你编写这个代码时,你处于属性的中间——你不在一个普通的代码上下文中。因此,您似乎无法以正常方式对系统对象调用方法。如果您尝试这样做,您将明白我的意思。为了澄清:当我像上面的第二个示例那样编写代码时,Visual Studio以红色突出显示“AppSettings”,并给出错误“无法解析符号'AppSettings'”。这听起来好像可以解决我的问题,但是我在哪里可以找到新类的其余CORS代码呢?使用Visual Studio查看现有EnableCors属性的代码。我的方法是临时将属性添加到某个对象上,将光标放入其中,然后按F12或Ctrl+B(取决于键盘映射),或右键单击“转到实现”。