将类型用作操作参数时出现自定义编译错误



我正在为一组web应用程序实现标识符类型库,出于合规性原因,我想将某些类型标记为不适合发送到客户端/从客户端接收。

使用变量本身不会导致运行时错误或问题,只是出于安全原因将其发送到客户端是不安全的。

最好是,当一个被禁止的类型被用作操作参数时,我希望引起编译错误,以给开发人员即时反馈和良好的体验。

我目前使用的示例:

public interface IInternalIdentifier {}
public class NonCompliantType : IInternalIdentifier {}
[ApiController]
public class BananaController : ControllerBase
{
public async Task<ActionResult> Cavendish(int good, NonCompliantType bad)
{
return Ok();
}
}

会扔一些类似的东西:

Error: Type [NonCompliantType : IInternalIdentifier] Cannot be used as an action parameter.

C#有这样的内置方式吗?

我们也在使用StyleCop,有没有办法创建一个可以做到这一点的规则?

这可以使用单元测试来完成,也可以在运行时使用反射来完成,但我在这里的目标是让开发人员立即反馈他们是如何使用这些类型的,并尽可能保持应用程序的干净。

单元测试可能会延迟10-15分钟,运行时会减慢启动时间或可能导致生产问题。

我们的旧代码库目前正在使用基于反射的单元测试,但由于该库将用于任何数量的web应用程序和微服务,因此确保每个程序都有等效的测试将是繁琐且容易出错的。

一些想法:

  1. 您可以将项目拆分为几个程序集,其中web应用程序代码的程序集无法访问包含禁用类型的程序集。但是中间会有一个或多个程序集可以访问两侧(如果需要(
  2. 风格警察规则应该是可能的
  3. 我个人的选择是添加一些启动代码,使用反射来检查所有的控制器操作方法,如果发现任何不喜欢的类型,就会崩溃应用程序

最新更新