.net web api 2文件上载错误
我正在使用以下代码处理上传到web api的文件:.net web api 2文件上载错误,.net,asp.net-mvc,asp.net-web-api,.net,Asp.net Mvc,Asp.net Web Api,我正在使用以下代码处理上传到web api的文件: [HttpPost] public async Task<IHttpActionResult> Post(string provider) { if (!Request.Content.IsMimeMultipartContent()) throw new Exception(); var streamProvider = new MultipartMemoryStreamProvider();
[HttpPost]
public async Task<IHttpActionResult> Post(string provider)
{
if (!Request.Content.IsMimeMultipartContent())
throw new Exception();
var streamProvider = new MultipartMemoryStreamProvider();
await Request.Content.ReadAsMultipartAsync(streamProvider); // FAILS HERE
foreach (var file in streamProvider.Contents)
{
var imageFilename = file.Headers.ContentDisposition.FileName.Trim('\"');
var imageStream = await file.ReadAsStreamAsync();
}
}
你知道为什么会出现这个错误吗?你不应该有存储上传文件的路径吗。大概是这样的:
var streamProvider = new MultipartMemoryStreamProvider(@"C:\Uploads");
你试过这个吗
[HttpPost]
public async Task<IHttpActionResult> Post(string provider)
{
if (!Request.Content.IsMimeMultipartContent())
throw new Exception();
var streamProvider = await Request.Content.ReadAsMultipartAsync(); // HERE
foreach (var file in streamProvider.Contents)
{
var imageFilename = file.Headers.ContentDisposition.FileName.Trim('\"');
var imageStream = await file.ReadAsStreamAsync();
}
}
[HttpPost]
公共异步任务Post(字符串提供程序)
{
如果(!Request.Content.IsMimeMultipartContent())
抛出新异常();
var streamProvider=wait Request.Content.ReadAsMultipartAsync();//此处
foreach(streamProvider.Contents中的var文件)
{
var imageFilename=file.Headers.ContentDisposition.FileName.Trim(“\”);
var imageStream=await file.ReadAsStreamAsync();
}
}
它看起来应该这样调用。我有相同的异常,但原因不同。我的Post方法的返回类型为void。一旦我将返回类型更改为
Task
,在我的情况下,字符串类型,它就开始工作了。我有一个类似的问题,但提供的解决方案对我不起作用,因此我的解决方案是:您上载的文件与IIS的安全限制不匹配
最好添加try catchblocks@user3629247他已经有例外了,为什么他需要一个trycatch呢?如果他忽略了problem@user441365您是否使用了正确的内容类型头值??aka Content-Type:multipart/form-data如果我们将方法包装在try-catch块中,我们可以优雅地处理任何可能发生的错误ur作为方法的一部分。在这种情况下,他已经捕捉到例外情况。您是否使用该属性?如果我准确复制此代码,我会在带有//此处注释的行上获得已处理的错误:/这是常见的.NET“async void”问题(即您不能使用异步方法返回void):
[HttpPost]
public async Task<IHttpActionResult> Post(string provider)
{
if (!Request.Content.IsMimeMultipartContent())
throw new Exception();
var streamProvider = await Request.Content.ReadAsMultipartAsync(); // HERE
foreach (var file in streamProvider.Contents)
{
var imageFilename = file.Headers.ContentDisposition.FileName.Trim('\"');
var imageStream = await file.ReadAsStreamAsync();
}
}
<system.web>
<httpRuntime maxRequestLength="30000000" /> <!-- if you forget this one it does not work -->
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="30000000" />
</requestFiltering>
</security>
</system.webServer>