我在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是一个密封类,所以我不能继承它。
答案 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();
使用此代码我希望这对您有用