【发布时间】:2018-12-20 17:55:57
【问题描述】:
不要在 Core 1.1 或 2.0 中检查它。 情况是使用 FormDataCollection 作为控制器方法中的参数,如下所示:
[Route("[controller]")]
[ApiController]
public class AuthController : ControllerBase
{
[Route("user")]
[HttpPost]
public HttpResponseMessage CheckUser(FormDataCollection form)
{
...
}
}
无论 Content-Type 标头如何,它都会返回 400 Bad Request。
但它适用于 .NET Framework 4.5:
[RoutePrefix("auth")]
public class AuthController : ApiController
{
[Route("user")]
[HttpPost]
public HttpResponseMessage user(FormDataCollection form)
{
...
}
}
我当然可以使用Request.Form.TryGetValue(key, out var value)。但是类 FormDataCollection 在 Core 中没有被贬低,我很好奇我们可以(并且应该)使用它来获取发布参数吗?
【问题讨论】:
-
它曾经有用吗?操作接受 DTO 或显式参数。使用 FormDataCollection 之类的存储桶违背了 MVC 数据绑定的目的
-
你为什么要使用
FormDataCollection?如果您使用 DTO,它将从正文中实例化。如果你想将简单的参数绑定到body,使用[FromBody] -
@PanagiotisKanavos 刚刚在一个用于 4.5 框架的仓库中发现它,并希望将其转换为 NET Core。它实际上不是 MVC,它的 API。而且形式上它不知道 DTO 的模型。
-
而且你不应该尝试随机代码。您不会在文档、教程或课程中找到该课程。浏览ASP.NET documentation site 中的教程,了解 Web API 的实际工作原理
标签: c# asp.net-core-2.1