当前位置: 首页 > 知识库问答 >
问题:

ASP。NET如何在Web API中读取多部分表单数据?

吴宝
2023-03-14

我将多部分表单数据发送到我的Web API,如下所示:

string example = "my string";
HttpContent stringContent = new StringContent(example);
HttpContent fileStreamContent = new StreamContent(stream);
using (var client = new HttpClient())
{
    using (var content = new MultipartFormDataContent())
    {
         content.Add(stringContent, "example", "example");
         content.Add(fileStreamContent, "stream", "stream");
         var uri = "http://localhost:58690/api/method";
         HttpResponseMessage response = await client.PostAsync(uri, content);

这是Web API:

[HttpPost]
[Route("api/method")]
public async Task<HttpResponseMessage> Method()
    {
         // take contents and do something
    }

如何读取字符串和流从请求体在我的Web API?

共有3个答案

韩豪
2023-03-14

您可以读取内容并获取所有文件信息(在我的示例图中),而无需通过以下方式复制到本地磁盘:

public async Task<IHttpActionResult> UploadFile()
{
    if (!Request.Content.IsMimeMultipartContent())
    {
        return StatusCode(HttpStatusCode.UnsupportedMediaType);
    }        

    var filesReadToProvider = await Request.Content.ReadAsMultipartAsync();

    foreach (var stream in filesReadToProvider.Contents)
    {
        // Getting of content as byte[], picture name and picture type
        var fileBytes = await stream.ReadAsByteArrayAsync();
        var pictureName = stream.Headers.ContentDisposition.FileName;
        var contentType = stream.Headers.ContentType.MediaType;
    }
}
海保臣
2023-03-14

这是我以前用来接收json data(可选文件)的代码

var result = await Request.Content.ReadAsMultipartAsync();

var requestJson = await result.Contents[0].ReadAsStringAsync();
var request = JsonConvert.DeserializeObject<MyRequestType>(requestJson);

if (result.Contents.Count > 1)
{
    var fileByteArray = await result.Contents[1].ReadAsByteArrayAsync();
    ...
}

您可以在这样的请求中组合不同类型的数据,这真是太棒了。

编辑:如何发送此请求的示例:

let serialisedJson = JSON.stringify(anyObject);
let formData = new FormData();
formData.append('initializationData', serialisedJson);
// fileObject is an instance of File
if (fileObject) {
    // the 'jsonFile' name might cause some confusion: 
    // in this case, the uploaded file is actually a textfile containing json data
    formData.append('jsonFile', fileObject);
}

return new Promise((resolve, reject) => {
    let xhr = new XMLHttpRequest();
    xhr.open('POST', 'http://somewhere.com', true);
    xhr.onload = function(e: any) {
        if (e.target.status === 200) {
            resolve(JSON.parse(e.target.response));
        }
        else {
            reject(JSON.parse(e.target.response));
        }
    };
    xhr.send(formData);
});
融修平
2023-03-14

这将帮助您开始:

 var uploadPath = HostingEnvironment.MapPath("/") + @"/Uploads";
 Directory.CreateDirectory(uploadPath);
 var provider = new MultipartFormDataStreamProvider(uploadPath);
 await Request.Content.ReadAsMultipartAsync(provider);

 // Files
 //
 foreach (MultipartFileData file in provider.FileData)
 {
     Debug.WriteLine(file.Headers.ContentDisposition.FileName);
     Debug.WriteLine("File path: " + file.LocalFileName);
 }

 // Form data
 //
 foreach (var key in provider.FormData.AllKeys)
 {
     foreach (var val in provider.FormData.GetValues(key))
     {
          Debug.WriteLine(string.Format("{0}: {1}", key, val));
     }
 }
 类似资料:
  • 我正在向webapi控制器发送多部分数据。如何阅读方法中的内容?

  • 我试图发送图像和文本字段到APIendpoint,但我收到 不支持的内容类型'多部分/表单数据;边界=---------------------------81801171514357 这是一个ASP. NET Core 2.1 Web API。我有这个: 而我的模特: 然后我使用axios: 我希望这个方法能够运行,而不是抛出异常。但是怎么做呢?我试图补充: 但是没有成功。 然后我试着: 该方法

  • 我在我的一个API控制器上有一个POST方法,它采用单个字符串值: 我在这里发布的帖子请求正文如下: (例如,这是一个常规的HTTP POST,您可以通过提交浏览器表单以及使用HTTP客户端来启动) 在WebAPI的候选版本中,这已经悄无声息地停止了工作——它只是不再绑定foo。为了让代码正常工作,我不得不用以下方法替换该方法: 这是可行的,但它有点混乱,比以前的版本涉及更多的管道测试。 我是否错

  • 我已经创建了一个使用“多部分/表单数据”的控制器 采样器请求对象 现在,我将尝试使用模拟MVC测试它,但我不知道如何将“多部分/表单数据”作为内容传递。我看到很多使用JSON的示例,但没有使用多部分/表单数据 有没有一种方法可以完成我的请求与多部分/form_data?理想情况下,它需要在MockHttpServletRequest的主体中

  • 我无法读取通过XMLHttpRequest发布的烧瓶中的数据。我正在使用这个jquery插件裁剪图像并上传到服务器 https://codecanyon.net/item/slim-image-cropper-responsive-uploading-and-ratio-cropping-plugin/16364167 数据-有关图像的信息在json中收集和隐藏,然后使用XMLHttpReques

  • 当我点击这个api时,我得到错误“415:Unsupported Media type”,这意味着不受支持的头。我想将文件从ARC加载到控制器。 我在pom.xml文件中添加了一些maven依赖项。 我的pom文件: