【发布时间】:2020-11-04 00:28:26
【问题描述】:
大家好
我正在使用 ASP.NET Core 3.1。我需要将控制器参数绑定到正文(它们太大而无法放入 URL)。我不希望只为单个方法创建 DTO(我也有多个端点,最终需要大量一次性 DTO)。这不可能开箱即用,所有当前的在线帮助似乎都集中在旧的 .NET Framework Web Api 上。
简单来说,给定以下控制器:
public class GreetController : ControllerBase
{
public string Index(string firstname, string lastname)
=> $"Hello {firstname} {lastname}";
}
以下 curl 命令:
curl -X GET --header "Content-Type: application/json" --data \
"{\"firstname\":\"John\",\"lastname\":\"Doe\"}" https://[Url]/Greet/
应该返回Hello John Doe,但参数为空。添加[FromBody] 也不起作用。我需要它来为 Json 和 Xml 请求主体工作。我知道这可以通过 URI 参数来完成。但是,我有一些参数对于 URI 来说太大了,因此它们必须在请求正文中。
注意 2:请不要冗长解释为什么这不符合 REST。
【问题讨论】:
-
我觉得这里有两点。第一个是关于使用 GET 方法的 Body。你不能那样做。二是使用DTO,需要一个复杂的对象来解析body内容,因为FromBodyAttribute不能写在多个方法参数中。
-
你可以在这里查看更多信息:docs.microsoft.com/en-us/aspnet/core/mvc/models/…
标签: c# asp.net-core .net-core