我有一个自定义ActionFilterAttribute
类,它将用户发送到错误屏幕,其中包含返回上一页的链接。
此属性接受两个控制器/操作对:一个用于错误屏幕操作(通常是相同的应用程序范围),另一个用于返回操作(通常对于控制器中的所有操作都相同)。我的想法是,当发生错误时,我不希望我的用户感到迷失,因为他们没有办法重新进入应用程序。
现在我有四个属性:两个用于控制器名称,两个用于操作名称。我不喜欢我在应用程序中对这两个动作进行硬编码。拥有友好的默认值会很好。我希望能够全局指定默认错误操作。
所以,有几个问题:
属性的一个问题是属性的所有参数都必须是常量。所以我无法计算ActionResult
或类似的东西。
答案 0 :(得分:1)
您可以在RouteConfig中定义路径,如下所示:
routes.MapRoute(
name: "Error",
url: "error/generalerror",
defaults: new { controller = "Error", action = "GeneralError" },
namespaces: new[] { "YourApplication.namespace" }
);
routes.MapRoute(
name: "CustomError",
url: "error/customerror",
defaults: new { controller = "Error", action = "CustomError" },
namespaces: new[] { "YourApplication.namespace" }
);
然后在ActionFilter
课程中,您可以拥有默认的两个构造函数
public YourFilterAttribute()
: this("Error")
{}
public YourFilterAttribute(string route)
{
//store route in some class variable
}
这样大多数课程都会使用这样的属性:[YourFilter]
而那些需要自定义路线的课程会使用它:[YourFilter("CustomError")]
这样你的一般路线只在它真正属于的类中被硬编码一次。当然,对于自定义错误路由,您可以创建一些常量字符串来清理更多代码