我有一个.NET核心应用程序,它有一个名为
Documents
用一个
POST
这样的签名:
[HttpPost]
public async Task<IActionResult> PostAsync(CreateDocumentRequest createDocumentRequest)
这个
CreateDocumentRequest
看起来像这样:
public class CreateDocumentRequest
{
public string Name { get; set; }
public string Description { get; set; }
public IFormFile File { get; set; }
}
很简单。然后我有一个
柱
在邮递员中配置的请求如下:
执行此命令时
柱
这个
DocumentsController
执行构造函数,应用程序细节表明
PostAsync
匹配:
激活的事件持续时间线程
application insights:trace“路由与{action=”postsync“,controller=”documents“}匹配。正在执行操作tdllims.mediaservice.controller.documentscontroller.postsync(tdllims.mediaservice)”
然而,它从未进入行动。我的直觉告诉我模型绑定失败了。这有两个原因。首先,所有其他的路由工作都是根据应用程序的洞察力进行的。第二,如果我完全删除参数,它就会进入操作。我试过的:
-
补充
[FromForm]
到
createDocumentRequest
-
只接受
IFormFile
把复杂的物体扔进行动中
-
拆分
创建文档请求
分成三个不同的参数
-
还有其他一些不那么重要的东西
现在,我怀疑当我们设置MVC时,我们可能会遗漏一些东西。我们正在配置一些东西,但是我觉得我们缺少一个格式化程序
multipart/form-data
不知何故。我这么想是因为我们用
AddMvcCore
而不是
AddMvc
:
.AddAuthorization()
.AddJsonFormatters()
.AddApiExplorer()
.AddJsonOptions(options =>
{
options.SerializerSettings.Converters.Add(new OptionConverter());
options.SerializerSettings.Converters.Add(new StringEnumConverter());
});
最后,我可以确认控制器工作正常,因为我有一个
GET
这是可访问的,并使其成为操作:
[HttpGet("{id}")]
public async Task<IActionResult> GetAsync(int id)