【问题标题】:Controller Attribute Check like using [FromBody] twice控制器属性检查就像使用 [FromBody] 两次
【发布时间】:2018-11-14 16:20:32
【问题描述】:

在 ASP.NET MVC 中(无论版本如何,如果它很重要,假设我使用的是最新的 Core 2.1)我们通过使用属性注释控制器来控制应用程序的行为和参数绑定,例如 [HttpPost] 用于对于应该来自查询字符串的方法参数,应该被称为 POST[FromQuery] 的方法。

现在我在过去几个月中发现了艰难的方法,有无数种方法来混合它。例如,如果您有两个参数声明为[FromBody],则一个将始终为null,因为只有一个可以代表主体。或者,如果您的方法被标记为[HttpGet],那么您的[FromBody] 将返回null,因为标准表明它不是这样做的。相信我,还有很多方法可以弄错。

我承认这些都是我的错误。如果我做得正确,它将起作用。然而,让我感到困惑的是,这是可以在编译时找到的东西。运行时依赖项为零。而且我只有在调试它时才发现它不起作用。我知道在我的程序中查找逻辑缺陷不是编译器的工作,但是控制器工厂在构造它时肯定可以找到它们吗?我将所有控制器类型放入测试方法的单元测试?还是静态代码分析或 stylecop 之类的工具?

我搜索了一下,结果为零。所以我的假设是我的谷歌技能达不到它。

.NET 框架中是否真的没有方法来检查我的所有控制器属性是否加起来可以正确提供?有没有办法告诉我我搞砸了?

如果真的没有,在我自己写之前,这是有原因的吗?如果我自己写了这篇文章,有什么已知的理由不应该这样做吗?

【问题讨论】:

    标签: c# asp.net-mvc custom-attributes


    【解决方案1】:

    在某种程度上,存在运行时依赖;即可能被路由到相关操作的任何请求的内容。您可以通过模拟生成格式良好的请求的服务器和客户端来执行自动化集成测试,并确认此处概述的预期结果:

    https://docs.microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-2.1

    【讨论】:

      【解决方案2】:

      事实证明,没有什么可以做我需要的,但没有什么能阻止你自己做。

      我编写了一个不错的小库类,我可以在单元测试中将我的控制器提供给它,它会给我一个错误流,然后会使测试失败。

      类的代码,虽然是我写的,但不是我的,而是我的雇主,所以我不能在这里发布,但没什么特别的,只是对公共方法及其参数进行了大量反射检查属性确保他们匹配。所以是的,这是可能的,它没有什么特别的,如果你和我一样需要它,那就继续为自己写一个整洁的小静态类CheckCorrectUsageOfAttributes 并使用通用方法ForController 并编写如下测试:

      /// <summary>
      /// Tests the account controller.
      /// </summary>
      [TestMethod]
      public void TestAccountController()
      {
          // arrange
      
          // act
          var result = CheckCorrectUsageOfAttributes.ForController<AccountController>();
      
          // assert
          var first = result.FirstOrDefault();
          Assert.IsNull(first, first);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-27
        • 2018-06-07
        • 1970-01-01
        • 2019-12-01
        • 2022-01-26
        • 2021-01-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多