应该使用webapi控制器过滤共享代码吗?

时间:2017-10-31 09:57:16

标签: c# asp.net

我有一个webapi授权过滤器,它对queryString进行一些安全检查,以获得" Get"调用

对于post方法,因为我需要查看有效负载以检索对象(此外,这将使我的过滤器依赖于我的dtos,我也不是一个巨大的粉丝...),因为我没有找到一种简单的方法来打开过滤器中的后期有效负载,我通过在控制器方法中进行检查来结束主题。 显然,两种情况下的逻辑都是一样的。

所以我将验证逻辑放在一个抽象的控制器中并使其成为公共静态"所以可以从过滤器和所有继承控制器调用它们。我已经从下面的查询中读取了谷歌搜索结果(避免调用静态方法),事实上,我也发现这个丑陋且不可测试。

但是什么是优雅替代品?

我考虑过创建一个(静态?)辅助类,但我只是在同一个概念中找到它的语法糖。 我也认为助手不应该是IOc,也许我在这里错了?

感谢您的投入!

1 个答案:

答案 0 :(得分:0)

您应该在查询字符串中包含您要进行的验证的详细信息,以帮助我们更详细地了解问题。但是根据我提供的信息,我有以下说。

在控制器中创建静态方法并在Filters中访问它比将DTO暴露给授权过滤器更难看。控制器充当服务层,过滤器(在某种程度上)也是它的一部分(服务层)。因此,如果必须将DTO暴露给过滤器,则没有任何错误。它可以简单地看作是“DTO暴露给服务层”。

但是,如果您真的希望避免它,请将抽象作为服务层的一部分,这些抽象可以暴露给过滤器。就像你可以创建一个接口(及其实现),它为你的目的公开一个验证方法,可以在授权过滤器中使用。