gpt4 book ai didi

c# - 路由的属性帮助,编译器错误

转载 作者:行者123 更新时间:2023-12-02 10:45:42 25 4
gpt4 key购买 nike

我创建了一个名为 RouteAttribute 的自定义属性:

[AttributeUsage(AttributeTargets.Property)]
public class RouteAttribute : Attribute
{
public string Url { get; set; }
public bool CheckPhysicalUrlAccess { get; set; }
public RouteValueDictionary Defaults { get; set; }
public RouteValueDictionary Constraints { get; set; }
public RouteValueDictionary DataTokens { get; set; }
}

它用于通过我的 url 助手类上的属性添加路由,该类包含我网站中的 url 列表,因此我有一种简单的方法来管理我的网站 url。

但是添加默认值时遇到问题,出现编译器错误:
[Route("~/MyPage/Home.aspx", new RouteValueDictionary { { "query", "value" } })]
public string HomePage
{
get { return "Home" }
}

为避免混淆,将值设置为routeurl,物理url来自属性,
原因是,我正在转换现有网站,而不是到处更改链接,一旦我完成页面,我就去上课并将物理网址更改为新页面

给出错误:

An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type

最佳答案

属性构造函数的参数值存储在元数据中。这对您可以指定的内容施加了严格的限制。只是简单的值类型,来自 typeof 的类型和这些值的简单一维数组。不允许任何代码,这是编译器提示的,new 运算符需要代码。

您可以在属性构造函数的主体中执行的操作没有任何限制,该代码稍后在反射代码检查属性时运行。建议类似的东西:

public class RouteAttribute : Attribute
{
public RouteAttribute(string url, string query, string value) {
this.url = url;
this.dunno = new RouteValueDictionary(query, value);
}
// etc..
}
...
[Route("~/MyPage/Home.aspx", "query", "value")]
public string HomePage
{
get { return "Home" }
}

这显然需要工作,我不知道字典是什么意思。小心它有副作用或需要资源,当属性被构造时,您不知道运行时状态。

关于c# - 路由的属性帮助,编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5118440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com