.net web api 2文件上载错误

.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();

我正在使用以下代码处理上传到web api的文件:

[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>