我有一个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或我在这里遗漏了什么?
答案 0 :(得分:1)
我遇到了类似的问题,我发现阻止客户端上传数据的唯一(肯定是火腿)解决方案是关闭TCP连接:
var ctx = Request.Properties["MS_HttpContext"] as HttpContextBase;
if (ctx != null) ctx.Request.Abort();
这适用于IIS主机。