使用邮递员的HttpRequest将图像上传到Azure Functions

时间:2018-08-02 01:27:52

标签: azure asp.net-core azure-functions

我很难使用HttpRequest将图像上传到Azure Functions。我特别使用HttpRequest,因为这是VS模板使用的。我已使用Postman将问题简化为一个简单的测试用例。

功能:

[FunctionName("Function1")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "post")]HttpRequest req)
{
    return new CreatedResult("", req.Form.Files[0].OpenReadStream());
}

邮递员:

Method: POST
URL: [Function URL]
Headers:
    Content-Type: multipart/form-data
Body: binary with image selected

所以应该发生的是选择一个要上传的文件,然后单击“发送”将其上传到Azure函数,该函数会自动返回流并在Postman响应中显示图片。

但是当我从Postman调用它时,尝试读取流时会引发异常:

  

“ System.IO.InvalidDataException:缺少内容类型边界。\ r \ n在Microsoft.AspNetCore.Http处位于Microsoft.AspNetCore.Http.Features.FormFeature.GetBoundary(MediaTypeHeaderValue contentType,Int32 lengthLimit)\ r \ n。在Microsoft.AspNetCore.Http.Features.FormFeature.ReadForm()\ r \ n(在Microsoft.AspNetCore.Http.Internal.DefaultHttpRequest.get_Form()\ r \ n在)上的Features.FormFeature.InnerReadFormAsync(CancellationToken cancelleToken)\ r \ n [我的代码]“

现在,如果我将其切换为像旧的Azure Function模板一样使用HttpRequestMessage并使用req.Content.ReadAsStreamAsync(),它就像一个魅力。

但是由于新模板使用HttpRequest,所以这个问题集中在HttpRequest的使用及其正确使用上。那么如何使用HttpRequest使它正常工作?

1 个答案:

答案 0 :(得分:1)

邮递员提供了一种上传表单数据,选择类型作为文件并上传图像的方法。(无需设置标题)

enter image description here

请参阅Fiddler中的此请求标头,邮递员会自动设置边界。

content-type: multipart/form-data; boundary=--------------------------970956809380964389175281

如果我们上传带有内容类型标头的二进制文件,则标头为Content-Type: multipart/form-data,因此会出现缺少边界的错误。