FormData 未进入 API 控制器的 Post 方法

何塞·L·加西亚

我正在尝试将文件从 Angular 5 应用程序发送到 .NET Core 2 中的 Web API 控制器,但我的模型始终为空。

如果我查看 chrome 工具,我会在请求中看到以下表单负载:

------WebKitFormBoundaryHbjYM4AKAkl6rQFo
Content-Disposition: form-data; name="quotationId"

4
------WebKitFormBoundaryHbjYM4AKAkl6rQFo
Content-Disposition: form-data; name="quotationFile"; filename="Analisis y Oferta E3M-v1.1.pdf"
Content-Type: application/pdf

------WebKitFormBoundaryHbjYM4AKAkl6rQFo--

角度POST

  quotationFileUpload(files: FileList, quotationId: number) {
    if (files && files[0].size > 0) {
      const formData = new FormData();

      formData.append('quotationId', quotationId.toString());
      formData.append('quotationFile', files[0]);

      this.projectService.uploadQuotation(formData).subscribe(
        response => {
          this.alertService.success('Proyecto', 'Presupuesto subido correctamente.');
        },
        error => {
          this.alertService.error('Proyecto', error.error);
        }
      );
    }
  }

Angular 服务方式:

  public uploadQuotation(quotation: FormData) {
    return this.http.post(this.config.apiUrl + '/projects/quotations/file', quotation);
  }

.NET 代码:

/// <summary>
/// Upload a Quotation document.
/// </summary>
/// <param name="model"></param>
[HttpPost("quotations/file")]
[ProducesResponseType(200, Type = typeof(Quotation))]
[ProducesResponseType(400, Type = typeof(string))]
[ProducesResponseType(404, Type = typeof(string))]
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public async Task<ActionResult> UploadQuotation([FromForm] QuotationUploadViewModel model)
{
    try
    {
        var quotation = await _context.Quotations
                                      .AsNoTracking()
                                      .SingleOrDefaultAsync(c => c.QuotationId == System.Convert.ToInt32(model.QuotationId));

        if (quotation == null)
        {
            return NotFound($"Presupuesto con Id {model.QuotationId} no encontrado.");
        }

        _context.Quotations.Update(quotation);

        // Save file
        var filePath = Path.Combine(_hostingEnvironment.ContentRootPath, @"Uploads", model.QuotationFile.FileName);

        using (var stream = new FileStream(filePath, FileMode.Create))
        {
            await model.QuotationFile.CopyToAsync(stream);
        }

        quotation.FileName = model.QuotationFile.FileName;
        await _context.SaveChangesAsync();

        return Ok(quotation);
    }
    catch (System.Exception ex)
    {
        _errorResponseMsg = $"No se pudo subir el Presupuesto {model.QuotationId}: {ex.Message}";
        _logger.LogError(_errorResponseMsg);
    }

    return BadRequest(_errorResponseMsg);
}

报价上传查看模型

using Microsoft.AspNetCore.Http;

namespace E3m.Api.ViewModels.E3m
{
    public class QuotationUploadViewModel
    {
        public string QuotationId { get; set; }
        public IFormFile QuotationFile { get; set; }
    }
}

使用此代码,web api 方法中的模型属性始终为空。

关于这个问题的任何想法?问候

何塞·L·加西亚

我发现了问题……在 Angular 中,我通过拦截器向所有带有 'Content-Type': 'application/json' 的请求添加了一个标头。删除此标题工作正常。

谢谢

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

API 控制器 Post 方法返回类型/值

来自分类Dev

如何在Web API控制器的Post方法中接收动态数据

来自分类Dev

DNN无法访问DNN Api控制器中的POST方法

来自分类Dev

从Web Api控制器中的Post方法获取任何参数

来自分类Dev

具有多个POST和单个PUT方法的Web Api控制器

来自分类Dev

地图未进入模拟器android API v2

来自分类Dev

尝试使用Axios与FormData发送POST时,MVC控制器接收到空数据

来自分类Dev

AngularJS $ http.post()将null发送到ASP.NET Web API控制器方法

来自分类Dev

AngularJS $ http.post()将null发送到ASP.NET Web API控制器方法

来自分类Dev

Android应用未进入onTouch方法

来自分类Dev

laravel 4无法进入指定控制器方法

来自分类Dev

无法点击所需控制器的POST方法

来自分类Dev

控制器中的get和post方法。Ruby on Rails

来自分类Dev

无法击中想要的控制器的POST方法

来自分类Dev

MVC不同的Get和Post到控制器方法

来自分类Dev

如何为POST方法设置WebAPI控制器

来自分类Dev

无法从控制器上的 AJAX post 方法获取参数

来自分类Dev

如何为Web API控制器方法指定ContentType

来自分类Dev

Breeze无法解决Web API控制器方法

来自分类Dev

Web API控制器,RESTful Web方法。(使用角度)

来自分类Dev

如何取消测试API控制器方法

来自分类Dev

Rails api控制器不会从父类继承方法

来自分类Dev

无法获取Web API控制器方法的URL

来自分类Dev

Angular API调用未在控制器方法中生效

来自分类Dev

调用API控制器的Delete方法不起作用

来自分类Dev

在API控制器中调用自定义方法

来自分类Dev

Web API控制器无法识别新添加的方法

来自分类Dev

如何从 codeigniter 控制器类调用 coinbase api 方法?

来自分类Dev

如何使用控制器的方法调用api

Related 相关文章

  1. 1

    API 控制器 Post 方法返回类型/值

  2. 2

    如何在Web API控制器的Post方法中接收动态数据

  3. 3

    DNN无法访问DNN Api控制器中的POST方法

  4. 4

    从Web Api控制器中的Post方法获取任何参数

  5. 5

    具有多个POST和单个PUT方法的Web Api控制器

  6. 6

    地图未进入模拟器android API v2

  7. 7

    尝试使用Axios与FormData发送POST时,MVC控制器接收到空数据

  8. 8

    AngularJS $ http.post()将null发送到ASP.NET Web API控制器方法

  9. 9

    AngularJS $ http.post()将null发送到ASP.NET Web API控制器方法

  10. 10

    Android应用未进入onTouch方法

  11. 11

    laravel 4无法进入指定控制器方法

  12. 12

    无法点击所需控制器的POST方法

  13. 13

    控制器中的get和post方法。Ruby on Rails

  14. 14

    无法击中想要的控制器的POST方法

  15. 15

    MVC不同的Get和Post到控制器方法

  16. 16

    如何为POST方法设置WebAPI控制器

  17. 17

    无法从控制器上的 AJAX post 方法获取参数

  18. 18

    如何为Web API控制器方法指定ContentType

  19. 19

    Breeze无法解决Web API控制器方法

  20. 20

    Web API控制器,RESTful Web方法。(使用角度)

  21. 21

    如何取消测试API控制器方法

  22. 22

    Rails api控制器不会从父类继承方法

  23. 23

    无法获取Web API控制器方法的URL

  24. 24

    Angular API调用未在控制器方法中生效

  25. 25

    调用API控制器的Delete方法不起作用

  26. 26

    在API控制器中调用自定义方法

  27. 27

    Web API控制器无法识别新添加的方法

  28. 28

    如何从 codeigniter 控制器类调用 coinbase api 方法?

  29. 29

    如何使用控制器的方法调用api

热门标签

归档