多部分表单没有';t接收字段

本文关键字:字段 表单 多部 | 更新日期: 2023-09-27 18:20:53

我正试图将一个文件和模型发送到我的api控制器,并通过发送fiddler的请求来测试它。到目前为止,我已经设法使用MultipartDataMediaFormatter接收到一个文件,但我无法接收字段。some变量将为空:

    [HttpPost]
    public IHttpActionResult Add(FormData formData)
    {
        HttpFile file;
        formData.TryGetValue("fieldNameHere", out file);
        string some;
        formData.TryGetValue("code", out some);

请求是

---------------------------acebdf13572468    
Content-Disposition: form-data; name="fieldNameHere"; filename="result.pdf"    
Content-Type: application/pdf
<@INCLUDE *C:'Users'mikhail.yakhyaev'Documents'result.pdf*@>
---------------------------acebdf13572468    
Content-Disposition: form-data; name="code" 
asdf
---------------------------acebdf13572468--

我曾尝试将签名设置为IHttpActionResult Add(HttpPostedFileBase fieldNameHere),但返回的错误是请求未命中该方法。也许请求本身包含错误?

多部分表单没有';t接收字段

我刚刚遇到了同样的问题,幸运的是,我尝试了很多,找到了解决方案。您是否注意到,您的模型内容类型的请求也是表单数据,这就是您不能以这种方式在api中使用FormData的原因。代码:

public IHttpActionResult Add(FormData formData)
{
   foreach(var fileValue in formData.Files){
     //do any you want
   }
   foreach(var field in formData.Fields){
     //do any you want
   }
   //may that be helpful
}

是否将encType = "multipart/form-data"添加到视图中的表单标记中?

成功案例

                using (var client = new HttpClient())
                using (var content = new MultipartFormDataContent())
                {
                    client.BaseAddress = new Uri(baseAddress);
                    foreach (var item in paramData)
                    {
                        content.Add(new StringContent(item.Value), item.Key);
                    }
                ......