过滤器应该与webapi控制器共享代码吗



我得到了一个webapi Authorize过滤器,它对queryString的"Get"调用进行一些安全检查。

对于post方法,由于我需要查看有效负载来检索对象(此外,这会使我的过滤器依赖于我的dto,我也不是一个超级粉丝…),并且由于我没有找到在过滤器中打开post有效负载的简单方法,我通过在控制器方法中进行检查来结束本主题。显然,这两种情况的逻辑是相同的。

因此,我将验证逻辑放在一个抽象控制器中,并使其成为"公共静态",这样就可以从过滤器和所有继承控制器中调用它们。我已经阅读了以下查询的谷歌结果(避免调用静态方法),说实话,我也觉得这很难看,也不稳定。

但是什么是优雅的替代方案呢?

我曾考虑过创建一个(静态?)助手类,但我只发现它是围绕同一概念的语法糖。我也认为助手不应该是IOc,也许我错了?

感谢您的投入!

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

在Controllers中创建一个静态方法并在Filters中访问它比向AuthorizeFilter公开DTO更难看。控制器充当服务层,过滤器(在某种程度上)也是服务层的一部分。因此,如果必须将DTO暴露给Filters,就没有什么错。它可以简单地看作是"DTO暴露在服务层"。

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

最新更新