首页 > 解决方案 > 如何检测取消的异步帖子

问题描述

我使用以下代码异步上传文件和表单数据。我需要更改哪些内容才能检测传输是否已取消或中断,然后采取适当的措施?

[HttpPost]
public async Task<object> UploadFile()
{
    if (!Request.Content.IsMimeMultipartContent("form-data"))
    {
        throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.UnsupportedMediaType));
    }

    var streamProvider = new MultipartFormDataStreamProvider(HttpContext.Current.Server.MapPath("~/App_Data/Temp/"));

    try
    {
        var filesReadToProvider = await Request.Content.ReadAsMultipartAsync(streamProvider);

        var paramName = "formInput";
        var formStreamToRead = filesReadToProvider.Contents.First(x => x.Headers.ContentDisposition.Name == $"\"{formInput}\"");
        var formInput = await formStreamToRead.ReadAsStringAsync();


        foreach (var fileData in streamProvider.FileData)
        {
            var fileName = "";
            if (string.IsNullOrEmpty(fileData.Headers.ContentDisposition.FileName))
            {
                fileName = Guid.NewGuid().ToString();
            }
            fileName = fileData.Headers.ContentDisposition.FileName;
            if (fileName.StartsWith("\"") && fileName.EndsWith("\""))
            {
                fileName = fileName.Trim('"');
            }
            if (fileName.Contains(@"/") || fileName.Contains(@"\"))
                {
                    fileName = Path.GetFileName(fileName);
                }
            File.Move(fileData.LocalFileName, Path.Combine(HttpContext.Current.Server.MapPath("~/App_Data/"), Path.GetDirectoryName(fileName) + Guid.NewGuid() + Path.GetExtension(fileName)));

        }
            return Request.CreateResponse(HttpStatusCode.OK);
    }
    catch (Exception e)
    {
        return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
    }

}

标签: c#asynchronouspost

解决方案


推荐阅读