目前我正在尝试在 MVC 6 中编写一个能够接受来自发布请求的数据的控制器。问题在于,根据客户端(并不总是 Web 浏览器),数据可能以请求 URL 中的键值对或请求正文中的 JSON 形式出现。
目前,此方法适用于接受来自 URL 的数据:
[HttpPost]
public async Task<CaptureResponse> CaptureData(CaptureInfo capture) {
...
}
经过大量试验和错误(以及堆栈溢出答案),我发现该[FromBody]
属性告诉模型绑定器查看请求正文,这是现在需要的,因为 MVC 6 将 WebApi 和标准 MVC 结合在一起。以下代码在表单正文中解析来自 JSON 的数据:
[HttpPost]
public async Task<CaptureResponse> CaptureData([FromBody] CaptureInfo capture) {
...
}
为简单起见,我想以某种方式将两者结合在一起,因此模型绑定器为我提供了相同参数变量中的数据。到目前为止,我可以将数据放入同一个 Action 的唯一方法是指定两个参数,一个用于 URL,一个用于正文,并对每个参数进行一些 null 检查,如下所示:
[HttpPost]
public async Task<CaptureResponse> CaptureData(CaptureInfo capture, [FromBody] CaptureInfo bodyCapture) {
if (bodyCapture != null) {
if (bodyCapture.RequiredProperty1!= null
&& bodyCapture.RequiredProperty2!= null) {
capture = bodyCapture;
}
}
...
}
我尝试在输入属性之前指定多个属性,如下所示:
[HttpPost]
public async Task<CaptureResponse> CaptureData(CaptureInfo [FromQuery][FromRoute][FromForm][FromBody] capture) {
...
}
但它不起作用。如果这样的事情是可能的,有什么想法吗?