我们在50个应用程序中拥有超过一千个HTTP服务,所有这些服务都使用HttpPost
进行更改服务器状态的操作。
我们使用Fiddler测试我们创建的每个服务,并且两个样板代码总是困扰我们并阻止平滑编码。
[FromBody]
属性,以便绑定到HTTP请求的正文Content-Type: application/json
进行内容协商。由于我们99%以上的服务都在身体中使用JSON来进行需要绑定模型的POST操作,我们如何在ASP.NET Core MVC中干掉这两段代码呢?换句话说,如果HTTP方法是[FromBody]
,如何告诉ASP.NET Core MVC始终为引用类型执行POST
,以及如何指示它仅使用JSON
内容协商对于HTTP请求的正文?
答案 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/