我创建了一个自定义属性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来自属性,
原因是,我要转换现有网站,而不是在各处更改链接,一旦完成页面处理,我就去上课,然后将物理网址更改为新页面
出现错误:
最佳答案
属性构造函数的参数值存储在元数据中。这对您可以指定的内容施加了严格的限制。只是简单的值类型,来自typeof的Type和这些值的简单一维数组。不允许代码,这是编译器抱怨的,新运算符需要代码。
在属性构造函数的主体中可以执行的操作没有任何限制,该代码稍后在反射代码检查属性时运行。建议类似以下内容:
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/