如何一次性将Angular的json数据和formdata(文件)发送到ASP.NET WebAPI Controller操作?

时间:2018-09-01 00:29:17

标签: c# json angular asp.net-web-api multipartform-data

假设我有一个看起来像这样的ASP.NET WebAPI控制器:

public class StuffController
{
    [HttpGet]
    [Route("api/v1/stuff/{id:int}")]
    [ResponseType(typeof(Model))]
    public async Task<IHttpActionResult> GetAsync(int id)
    {
        // ...
    }

    [HttpPut]
    [Route("api/v1/stuff/{id:int}")]
    [ResponseType(typeof(IHttpActionResult))]
    public async Task<IHttpActionResult> UpdateAsync(int id, Model model)
    {
        // ...
    }

    [HttpPost]
    [Route("api/v1/stuff")]
    [ResponseType(typeof(IHttpActionResult))]
    public async Task<IHttpActionResult> CreateAsync([FromBody] Model model)
    {
        // ...
    }
}

无论如何,我是否可以从Angular应用(显然是在正确注入HttpClient的服务中)发送/上传/发布模型,模型(包含将从正文中提取的json数据)和包含文件的表单数据。 ..)?

问题是...我真的不知道如何:

const formData = new FormData();

const uploadReq = new HttpRequest('POST', url, formData, {
     reportProgress: true,
     headers: headers
});

就像是......

  • 我将json数据添加为表单数据的一部分,并且无法在Web API Controller操作中将其从主体中提取为“诸如”,并且我必须保留Angular应用中用于json数据的键,然后循环其余键(可能是所有文件)上。
  • 我必须为每个文件发送一个不同的“ POST”

1 个答案:

答案 0 :(得分:3)

发送MIME多部分请求(threshold value = 85),每个blob是其自己的FormData条目:https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects-在服务器端,您可以使用ASP.NET从请求中提取不同部分。 import cv2 img = cv2.imread('test.png', 0) threshold = 85 cv2.threshold(img,threshold,255,cv2.THRESH_BINARY,img) cv2.imshow('test',img) cv2.waitKey(0) API:https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/sending-html-form-data-part-2

您将需要更改控制器操作以不使用方法参数,而是直接从multipart/form-data读取:

Request.Content.ReadAsMultipartAsync