【发布时间】:2013-10-23 05:13:48
【问题描述】:
我很想知道是否有更好的方法来实现以下内容。我不想创建复杂或不可维护的代码。
我正在创建一个将由未来项目实现的类库。该库包含几个过滤器/属性,继承自 ActionFilterAttribute,实现应用程序可以使用这些过滤器/属性来装饰控制器或操作。
一个例子是 MustBeLoggedInAttribute。这将检查 cookie 以查看当前用户是否已登录。如果存在有效的 cookie,则不采取任何操作。如果没有有效的 cookie,则该属性将重定向到控制器和操作,例如AuthController > Login()。
因此,由于有一个应用程序实现了类库,我不知道应用程序想要重定向到哪个控制器或操作。我想了两种获取这些信息的方法。
-
获取实现应用以在其 web.config 中指定控制器和操作名称。
我通过检查它们是否都存在于实现应用程序的程序集中来验证字符串名称,否则尝试使用默认值,例如主页 > 索引()。这种方法似乎有很多缺点,包括
降低实现应用的可维护性(更改控制器或操作名称也意味着更新 Web 配置)
我必须验证字符串名称
实现应用程序的开发人员需要阅读文档才能知道如何指定这一点
可能还有更多
-
让过滤器/属性接受两个参数来指定控制器和动作
这似乎也有第一个想法的一些陷阱,例如如果名称发生更改,则更新名称,而且名称将在整个实施应用程序中重复。
我觉得必须有更好的方法来做到这一点,这将使实现应用程序可维护,不会重复代码,也不会太复杂。 这是一厢情愿吗?
过滤器需要知道重定向到哪里,但最好的方法是什么? 或者我应该以完全不同的方式做到这一点?实现应用程序是否应该实现自己的过滤器/属性,然后使用我的类库中的公共方法进行 cookie 检查?还有更好的方法吗?
我非常感谢人们对此的想法,因为我真的不想创建糟糕的代码。 非常感谢!
【问题讨论】:
标签: c# asp.net-mvc web-config class-library actionfilterattribute