我创建了一个自定义属性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/

10-12 12:43
查看更多