0

我有一个自定义ActionFilterAttribute类,可将用户发送到错误屏幕,其中包含返回上一页的链接。

此属性接受两个控制器/操作对:一个用于错误屏幕操作(通常在应用程序范围内相同),另一个用于返回操作(通常对于控制器中的所有操作都相同)。这个想法是,当发生错误时,我不希望我的用户因为无法返回应用程序而感到迷茫。

现在我有四个属性:两个用于控制器名称,两个用于操作名称。我不喜欢在我的应用程序中硬编码这两个操作。为它们设置友好的默认值会很好。我希望能够全局指定默认错误操作。

所以,有几个问题:

  • 如何全局配置我的属性可以引用的路由?
  • 当我需要覆盖默认值时,引用控制器/动作对的最佳方式是什么?

它作为属性的问题之一是属性的所有参数都必须是常量。所以我不能计算一个ActionResult或类似的东西。

4

1 回答 1

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")]

这样,您的一般路线只会在它真正属于的类中硬编码一次。当然,对于自定义错误路由,您可以创建一些常量字符串来清理更多代码

于 2013-03-15T18:13:36.893 回答