3

У меня есть страница app.net asp.net, где пользователь может загружать некоторые файлы. Я использую jquery-file-upload. Исходя из некоторого условия, я хочу отменить загрузку с серверной части, но она не работает. Независимо от того, что я делаю, файл всегда идет на сервер, прежде чем asp.net вернет ошибку. Пример, я могу держать только это при загрузке:Как отменить загрузку

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

Если я ставлю точку останова на return, я могу видеть, что это попало, как только начинается загружаемых но я должен ждать загрузки до конца и только затем вызывается обработчик ошибок javascript. Невозможно ли окончательно завершить запрос, отменив загрузку?

Update 1:

Я заменил Jquery-файл-загрузки с JQuery-форму, и теперь я использую 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

У меня такая же проблема, и я тоже не могу найти ответ. Это не может быть так сложно ... – Wbmstrmjb

+0

У меня и других подобных проблем, см. E. г. Отменить длительный почтовый запрос из ASP.NET Web API 2 (https://forums.asp.net/post/6157703.aspx) – Sonic78

ответ

1

У меня была аналогичная проблема, и единственный (по общему признанию неуклюжий) решение, которое я мог бы найти, чтобы остановить клиента от загрузки данных было закрыть соединение TCP:

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

Это работает для хостинга IIS ,

Смежные вопросы