如何取消上传

时间:2014-10-26 12:24:08

标签: asp.net file-upload asp.net-web-api jquery-forms-plugin

我有一个asp.net web api页面,用户可以上传一些文件。我正在使用jquery-file-upload。基于某些条件,我想从服务器端取消上传,但它无法正常工作。无论我做什么,文件总是在asp.net返回错误之前进入服务器。例如,我可以在上传时保留这一点:

public async Task<HttpResponseMessage> Post(int id, CancellationToken token)
{
    return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Cant upload");
}

如果我在return上放置一个断点,我可以看到它在上传开始后立即被点击,但我必须等待上传结束,然后才会调用javascript错误处理程序。是否无法终止请求,取消上传?

更新1:

我用jquery-form替换了jquery-file-upload,现在我在表单上使用了ajaxSubmit。这并没有改变任何事情。 我还尝试实现DelegatingHandler,如下所示:

public class TestErrorHandler : DelegatingHandler
{
    protected async override Task<HttpResponseMessage> SendAsync(
        HttpRequestMessage request, CancellationToken cancellationToken)
    {

        //throw new HttpException(403, "You can't upload");

        var response = request.CreateResponse(HttpStatusCode.Unauthorized);
        response.ReasonPhrase = "You can't upload";
        return Task.FromResult<HttpResponseMessage>(response).Result;            
    }
}

config.MessageHandlers.Add(new TestErrorHandler());

这也不起作用。

我试图在请求上禁用缓冲区:

public class NoBufferPolicySelector : WebHostBufferPolicySelector
{
    public override bool UseBufferedInputStream(object hostContext)
    {
        return false;   
    }        
}

config.Services.Replace(typeof(IHostBufferPolicySelector), new NoBufferPolicySelector());

没有游戏 - 它仍会在返回错误之前上传所有文件。

我只需取消上传请求即可。这是不可能的web api或我在这里遗漏了什么?

1 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,我发现阻止客户端上传数据的唯一(肯定是火腿)解决方案是关闭TCP连接:

var ctx = Request.Properties["MS_HttpContext"] as HttpContextBase;
if (ctx != null) ctx.Request.Abort();

这适用于IIS主机。