我有一个控制器端点,我希望它既用于上传图像,也用于发送JSON有效负载.

我知道在Spring Boot中,您可以使用@RequestPart注释并将键/值对作为表单数据进行传递.我正在使用.Net核心,但很难测试向我的终结点发送请求.

我的模型类如下所示: CreateCompanyRequest.cs

public class CreateCompanyRequest {
    
    public string Name { get; set; }
    public string Description { get; set; }
    public CreateAddressRequest? Address { get; set; }
    public int IndustryId { get; set; }
    public int Size { get; set; }
    public DateTime FoundedDate { get; set; }
}

我还有一个包装类,其中包含这个请求类,以及一个用于上传文件的IFormFile属性.

CreateCompanyMultipartRequest.cs

public class CreateCompanyMultipartRequest {
    
    [FromForm(Name = "company")]
    public CreateCompanyRequest Company { get; set; }
    
    [FromForm(Name = "avatar")]
    public IFormFile Avatar { get; set; }
}

CompanyController.cs

     [Authorize(Roles = "Recruiter")]
        [HttpPost]
        public async Task<IActionResult> CreateCompany([FromForm] CreateCompanyMultipartRequest request) {
            
            var response = await _companyService.CreateCompany(request.Company, "john@gmail.com");
            
            if (response != null && request.Avatar != null) {
                await _documentService.UploadDocument(request.Avatar, DocumentType.AVATAR, "john@gmail.com", response.Id);
            }
            
           // Extra validation..

            return Ok(new ApiResponse<CompanyResponse>() {
                Data = response, Status = true
            });
        }

我try 在Postman中发送与请求类匹配的密钥为AvatarCompany的请求,但收到了此验证错误.

我为公司发送的数据是一个具有所需属性的JSON文件,也try 在Postman中将JSON作为文本类型发送.

enter image description here

推荐答案

您可以try 使用json字符串进行POST,然后反序列化为控制器中的对象.

    public class CreateCompanyMultipartRequest
    {
        public string Company { get; set; }

        public IFormFile Avatar { get; set; }
    }
        [HttpPost]
        public async Task<IActionResult> CreateCompany([FromForm]CreateCompanyMultipartRequest request)
        {
            CreateCompanyRequest createCompanyRequest =JsonSerializer.Deserialize<CreateCompanyRequest>(request.Company);
            .....
        }

enter image description here

Csharp相关问答推荐

EF Core在请求列表时忽略列,但在按ID获取时包含

Elasticsearch:当我try 使用c#将嵌套对象添加到filter中时出现问题

需要澄清C#的Clean Architecture解决方案模板的AuditableEntityInterceptor类

如何分配对象后的class的属性?

有没有办法在WPF文本框中添加复制事件的处理程序?

Quartz调度程序不调用作业(job)类

附加标题不起作用,而添加则起作用

Swagger没有显示int?可以为空

用C#从XML内部元素中获取特定值

Postgres ENUM类型在第一次运行时对Dapper不可见

如何强制新设置在Unity中工作?

System.NotSupportdException:流不支持读取

如何使用ODP.NET C#设置Oracle会话时间长度限制

如何将默认区域性更改为fr-FR而不是en-US?

为什么当我try 为玩家角色设置动画时,没有从文件夹中拉出正确的图像?

如何在使用Google.Drive.apis.V3下载文件/文件夹之前压缩?

C#-如何将int引用获取到byte[]

使用Try-Catch-Finally为API端点处理代码--有什么缺点?

如何对构建在Clean架构和CQRS之上的控制器进行单元测试?

使用';UnityEngineering.Random.Range()';的IF语句仅适用于极高的最大值