Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将文件上载到Web API_C#_Asp.net Mvc_Asp.net Web Api - Fatal编程技术网

C# 将文件上载到Web API

C# 将文件上载到Web API,c#,asp.net-mvc,asp.net-web-api,C#,Asp.net Mvc,Asp.net Web Api,我有以下型号: public class FileModel { public byte[] FileData{get;set;} public string FileName {get;set;} } 我已经编写了一个私有的Web API服务,我的Web应用程序使用它。 当用户上传文件时,我将这些文件转换成字节数组,并从C#code(不是从HTML页面,因为我的Web API是我网站的私有)向我的Web API发送一个列表,它保存我的文件并返回结果 Web API方法: [HttpP

我有以下型号:

public class FileModel
{
  public byte[] FileData{get;set;}
  public string FileName {get;set;}
}
我已经编写了一个私有的Web API服务,我的Web应用程序使用它。 当用户上传文件时,我将这些文件转换成字节数组,并从C#code(不是从HTML页面,因为我的Web API是我网站的私有)向我的Web API发送一个
列表
,它保存我的文件并返回结果

Web API方法:

[HttpPost]
public UploadFiles(List<FileModel> files)
{
// Do work
}
[HttpPost]
公共上载文件(列表文件)
{
//工作
}
如果我上传了很多大文件,上面的代码就会中断-由于大文件的
FileModel
s超过了最大序列化长度,因此代码无法序列化这些文件


如何解决此问题?有没有其他方法可以在不向用户公开的情况下将文件上载到Web API

将其添加到web.config文件中


并增加MVC
config
文件中的内容长度

<system.webServer> 
  <security> 
      <requestFiltering> 
         <requestLimits maxAllowedContentLength="1999999999" /> 
      </requestFiltering> 
  </security>
<system.webServer>

maxRequestLength
值以KB为单位

maxAllowedContentLength
值以字节为单位


您可以根据自己的要求更改以上尺寸。

这里有一些解决方案

控制器操作将不接受代码段中显示的任何参数

public async Task<HttpResponseMessage> PostByteArrayAsync()
{
       string root = HttpContext.Current.Server.MapPath("~/folder");
       var provider = new MultipartFormDataStreamProvider(root);
       await Request.Content.ReadAsMultipartAsync(provider);
       foreach (var file in provider.FileData)
       {
             var buffer = File.ReadAllBytes(file.LocalFileName);
             // store to db and other stuff
       }
       return Ok();
}

可能重复使用块字节方法异步上载@NikhilKS我不想进行多个web api调用。谢谢,但maxRequestLength不是我的问题的原因。当我使用httpClient.PostAsJsonAsync(“api URL”,postObj)时。我返回一个Web API method not found的响应。但这只是针对大型文件。我认为httpClient无法将我的对象序列化为Json并发送空对象,因此我得到了Web API method not found响应。这是我的最佳猜测。my web.config内容长度:您好,谢谢您的回复,但我不会试图将文件直接发布到我的web API。我正在将文件发布到我的MVC操作控制器,并将我的控制器操作发布文件发布到我的web API。我不希望我的web API url公开,因为它是私有的(即特定于我的网站)
UploadData(event) {
        this.setState({ loading: true });
        event.preventDefault();
        let data = new FormData();
        let fileData = document.querySelector('input[type="file"]').files[0];
        data.append("data", fileData);
        let that = this;
        fetch("api/upload", {
            method: "POST",
            "Content-Type": "multipart/form-data",
            "Accept": "application/json",
            body: data
        }).then(function (res) {
            if (res.ok) {
                call('api', 'GET').then(response => { response.error ? response.message : that.props.change(response); that.setState({ loading: false }) });
            }
            else {
                that.setState({ loading: false });
                that.failedMsg();
            }
        })
    }