C# ASP.NET Web API文件上载

C# ASP.NET Web API文件上载,c#,asp.net,asp.net-web-api,C#,Asp.net,Asp.net Web Api,我在将文件上载到Web Api时遇到一些问题。我已经创建了空的Web API项目,并尝试了以下代码: 公共类上载控制器:ApiController { [HttpPost] [路由(“api/上传/文件”)] 公共异步任务PostFormData() { //检查请求是否包含多部分/表单数据。 如果(!Request.Content.IsMimeMultipartContent()) { 抛出新的HttpResponseException(HttpStatusCode.UnsupportedMe

我在将文件上载到Web Api时遇到一些问题。我已经创建了空的Web API项目,并尝试了以下代码:

公共类上载控制器:ApiController
{
[HttpPost]
[路由(“api/上传/文件”)]
公共异步任务PostFormData()
{
//检查请求是否包含多部分/表单数据。
如果(!Request.Content.IsMimeMultipartContent())
{
抛出新的HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
字符串root=System.Web.HttpContext.Current.Server.MapPath(“~/App_Data”);
var provider=新的MultipartFormDataStreamProvider(根);
尝试
{
//读取表单数据。
wait Request.Content.ReadAsMultipartAsync(提供程序);
//这说明了如何获取文件名。
foreach(provider.fileData中的MultipartFileData文件数据)
{
Trace.WriteLine(fileData.Headers.ContentDisposition.FileName);//获取文件名
Trace.WriteLine(“服务器文件路径:”+fileData.LocalFileName);//获取文件路径
}
return Request.CreateResponse(HttpStatusCode.OK,“成功传递上传文件!”);
}
捕获(System.e例外)
{
返回请求.CreateErrorResponse(HttpStatusCode.InternalServerError,e);
}
}
}
为了确保我在前端部分没有犯任何错误,我使用了邮递员:

但是,最初我需要从react应用程序发布此文件,我的代码如下所示:

const UploadFile=connect(
MapStateTops,
mapDispatchToProps,
)(
类扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
文件:“”,
};
}
异步提交(e){
e、 预防默认值();
const formData=new formData();
append('file',this.state.file,{type:'text/csv'});
//我在这里发送redux操作,但为了简化文件上传测试,我在这里使用了axios post
//我尝试了使用和不使用动作名称的不同URL
邮政('http://localhost:44370/api/upload/file,formData)
.catch(错误=>{
console.log(错误);
})
.然后(()=>{});
}
设置文件(e){
this.setState({file:e.target.files[0]});
}
render(){
返回(
此项。提交(e)}>
文件上传
文件上传
this.setFile(e)}/>
上传
);
}
},
);
但无论是从react应用程序还是从邮递员那里,我都无法到达我的操作的断点。我总是得到404找不到通过邮递员和错误连接中止从反应应用程序

我也尝试了很多其他不同的方法,也尝试了使用HttpFileBase,但是仍然没有结果

关于如何更改代码以便能够将文件上载到Web Api控制器的操作,您有什么想法吗

PS.我能够使用以下代码将文件上载到asp.net core controller:

[HttpPost]
公共异步任务Post(格式化文件)
{
if(file==null | | file.Length==0)
返回内容(“未选择文件”);
var fileId=Guid.NewGuid();
var path=path.Combine(
目录。GetCurrentDirectory(),“上载”,
文件名);
使用(var stream=newfilestream(路径,FileMode.Create))
等待文件.CopyToAsync(流);
}
和相同的代码,但我需要的不是.net核心项目的解决方案,只是一个普通的asp.net web api

更新 根据一条评论,我尝试了只使用表单的html页面:


文件

但是我的天啊。。查看屏幕截图中的错误消息

它不仅是404,而且是
404.13-内容长度太大。
。你想上传一个很大的文件吗

如果您要允许上载大文件,则应修改请求筛选设置

查看屏幕截图中的“您可以尝试的事情”部分:


验证配置/system.webServer/security/requestFiltering/requestLimits@maxAllowedContentLengthapplicationhost.config或web.config文件中的设置。。查看屏幕截图中的错误消息

它不仅是404,而且是
404.13-内容长度太大。
。你想上传一个很大的文件吗

如果您要允许上载大文件,则应修改请求筛选设置

查看屏幕截图中的“您可以尝试的事情”部分:


验证配置/system.webServer/security/requestFiltering/requestLimits@maxAllowedContentLengthapplicationhost.config或web.config文件中的设置

我在我的环境中测试了控制器,它按预期工作。我可以上传一个文件,只需在我的web api项目中添加一个带有
和表单`enctype=“multipart/form data”`和
action=“/api/upload/file”
的HTML页面。你说react代码在工作,我说控制器代码在工作。例如,控制器配置或路由一定有问题。你把控制器类放在哪里了?我把它放在
控制器下
folder@OguzOzgul是的,在controllers文件夹下,我试过了