如何在所有后期操作中干掉ASP.NET Core MVC中的[FromBody]属性和默认内容协商?

时间:2017-12-17 05:28:50

标签: json asp.net-core

我们在50个应用程序中拥有超过一千个HTTP服务,所有这些服务都使用HttpPost进行更改服务器状态的操作。 我们使用Fiddler测试我们创建的每个服务,并且两个样板代码总是困扰我们并阻止平滑编码。

  1. 所有模型(引用类型)都应具有[FromBody]属性,以便绑定到HTTP请求的正文
  2. 每次我们都应在我们的HTTP请求中包含Content-Type: application/json进行内容协商。
  3. 由于我们99%以上的服务都在身体中使用JSON来进行需要绑定模型的POST操作,我们如何在ASP.NET Core MVC中干掉这两段代码呢?换句话说,如果HTTP方法是[FromBody],如何告诉ASP.NET Core MVC始终为引用类型执行POST,以及如何指示它仅使用JSON内容协商对于HTTP请求的正文?

1 个答案:

答案 0 :(得分:1)

简短答案:使用 [ApiControllerAttribute] ,但它还有其他一些限制和功能。

从asp.net core mvc 2.1开始,您可以使用属性 [ApiControllerAttribute] 装饰特定的控制器,基本控制器或整个程序集。它以多种方式改变了控制器的行为,其中之一正是您所需要的:默认情况下,绑定将进入主体,因此您无需在每个控制器上都指定 [FromBody] 行动。 请注意,它添加了您可能需要或不需要的其他一些功能:

  • 属性路由要求:您将需要在使用 [ApiControllerAttribute] 装饰的所有控制器上使用属性指定路由。

  • 自动HTTP 400响应:这就是在您的操作被调用之前自动进行模型验证。

  • [FromForm] 装饰动作时的多部分/表单数据请求推断。

  • 错误状态代码的问题详细信息:更详细的信息与状态代码一起返回。

但是,所有这些功能(除了属性路由之外)都不是强制性的,可以根据需要进行更改。

此处提供更多信息:https://docs.microsoft.com/en-us/aspnet/core/web-api/?view=aspnetcore-3.0#multipartform-data-request-inference 此处:https://www.strathweb.com/2018/02/exploring-the-apicontrollerattribute-and-its-features-for-asp-net-core-mvc-2-1/