C# 文件的发布未使其生效
我有一个.NET核心应用程序,它有一个名为C# 文件的发布未使其生效,c#,asp.net-mvc,asp.net-core,.net-core,asp.net-core-mvc,C#,Asp.net Mvc,Asp.net Core,.net Core,Asp.net Core Mvc,我有一个.NET核心应用程序,它有一个名为Documents的控制器,带有POST签名,如下所示: [HttpPost] public async Task<IActionResult> PostAsync(CreateDocumentRequest createDocumentRequest) public class CreateDocumentRequest { public string Name { get; set; } public string D
Documents
的控制器,带有POST
签名,如下所示:
[HttpPost]
public async Task<IActionResult> PostAsync(CreateDocumentRequest createDocumentRequest)
public class CreateDocumentRequest
{
public string Name { get; set; }
public string Description { get; set; }
public IFormFile File { get; set; }
}
很简单。然后,我在Postman中配置了一个POST
请求,如下所示:
[HttpPost]
public async Task<IActionResult> PostAsync(CreateDocumentRequest createDocumentRequest)
public class CreateDocumentRequest
{
public string Name { get; set; }
public string Description { get; set; }
public IFormFile File { get; set; }
}
- 网址:
- 正文:配置为
,我有表单数据
、名称
和说明
都配置在键值对界面中。此外,文件
被设置为文件
类型,因此它允许我浏览文件文件
POST
时,DocumentsController
执行构造函数,应用程序洞察表明PostAsync
已匹配:
激活的事件持续时间线程
应用程序细节:跟踪“与{action=“PostAsync”,controller=“Documents”}匹配的路由。执行操作TdlLims.MediaService.controller.DocumentsController.PostAsync(TdlLims.MediaService)”
然而,它从未进入行动。我的直觉告诉我模型绑定失败了。这有两个原因。首先,路由的所有其他部分都根据应用程序洞察进行工作。第二,如果我完全删除参数,它确实会进入操作。我所尝试的:
- 将
添加到[FromForm]
createDocumentRequest
- 只接受一个
到动作中,删除复杂对象ifformfile
- 将
拆分为三个不同的参数CreateDocumentRequest
- 以及其他一些不那么重要的事情
多部分/表单数据的格式化程序。我有这种感觉,因为我们使用的是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)
[HttpGet(“{id}”)]
公共异步任务GetAsync(int id)
最后,问题是文件的大小。如果.NETCore在发生类似情况时抛出错误而不是返回200
,那就太好了。我试图上传一些图像,我需要找出增加文件大小的正确方法,但是当我上传一个小文本文件时,POST
起了作用,文件被反序列化到IFormFile
中
我相信属性RequestFormLimits
和RequestSizeLimit
最终将在设置最大文件大小方面发挥作用