Ale*_*ett 4 c# asp.net-web-api asp.net-core
我正在尝试向我的控制器发出 HTTP 请求并发回可为空的 DateTime。当填充字段时,此请求成功,当字段 (CloseDate) 为 null 时,我收到一个 HTTP 响应,指出 null 无效(对于 Close Date)。
在我的控制器中,我有一个如下所示的 post 方法:
[HttpPost]
[Authorize]
[Route("properties/{propertyId}")]
public async Task<IActionResult> BasicPropertyUpdate([FromForm] PropertyViewModel request)
{
}
Run Code Online (Sandbox Code Playgroud)
由于我收到 HTTP 400 响应,因此我不会遇到任何断点。
在我的 ViewModel 中,我有一个如下所示的合同:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
namespace ViewModels
{
public class PropertyViewModel
{
//other stuff
public DateTime? CloseDate { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
原始 HTTP 响应(由 Fiddler 捕获)如下所示:
HTTP/1.1 400 Bad Request
Date: Tue, 10 Dec 2019 22:07:01 GMT
Content-Type: application/json; charset=utf-8
Server: Kestrel
Vary: Origin
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://localhost:3000
Access-Control-Expose-Headers: TotalCount
Request-Context: appId=cid-v1:712f8d3d-6af6-44c6-a573-2b9adda915c7
Content-Length: 62
{"closeDate":["The value 'null' is not valid for CloseDate."]}
Run Code Online (Sandbox Code Playgroud)
我的 HTTP 请求中的表单数据(由 Fiddler 捕获)如下所示:
-----------------------------32591187621655
Content-Disposition: form-data; name="closeDate"
null
Run Code Online (Sandbox Code Playgroud)
是否存在某种固有的限制来[FromForm]阻止发送可为空的日期时间字段?如果是这样,是否有一些推荐的替代方案可以完成工作?
" null" 是 JSON 文字,但 JSON 反序列化器不用于读取表单数据。它以 4 个字符的字符串形式发布。
模型绑定器会将空字符串绑定到可null为空的值类型,例如DateTime?。如果您将数据 POST 为application/x-www-form-urlencoded,则可以省略名称/值对或指定空字符串(即closeDate=)。
该表单数据似乎被编码为mime/multipart但同样的原理成立。零长度 mime 部分是一个空字符串,模型绑定器可以将其解释为null.
| 归档时间: |
|
| 查看次数: |
2995 次 |
| 最近记录: |