C# 通过WebAPI接收多部分表单时出错

C# 通过WebAPI接收多部分表单时出错,c#,asp.net,angular,asp.net-web-api,file-upload,C#,Asp.net,Angular,Asp.net Web Api,File Upload,你好吗 我在Angular2中创建了一个表单,它使用表单数据发出POST请求并将文件上载到webapi控制器。 但是我有一个小问题 我的系统的一些用户(在我公司网络之外访问该系统的用户)在20%的尝试中提交表单,出现错误(我在NLog注册)。 但是,如果我尝试在公司网络中提交具有相同数据和相同文件的表单,那么一切都会很完美(100%的尝试) 然而,这种错误是间歇性的,平均每10个请求中有2个会发生这种错误,而且只有在公司网络之外访问系统的用户才会发生这种错误 和我的C#控制器: `公共异步任务P

你好吗

我在Angular2中创建了一个表单,它使用表单数据发出POST请求并将文件上载到webapi控制器。 但是我有一个小问题

我的系统的一些用户(在我公司网络之外访问该系统的用户)在20%的尝试中提交表单,出现错误(我在NLog注册)。 但是,如果我尝试在公司网络中提交具有相同数据和相同文件的表单,那么一切都会很完美(100%的尝试)

然而,这种错误是间歇性的,平均每10个请求中有2个会发生这种错误,而且只有在公司网络之外访问系统的用户才会发生这种错误

和我的C#控制器: `公共异步任务PostFormData(){ HttpResponseMessage响应

    try
    {
            if (!Request.Content.IsMimeMultipartContent())
            {
                    throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }

            var provider = new MultipartMemoryStreamProvider();
            await Request.Content.ReadAsMultipartAsync(provider);

            var fileContent = provider.Contents.FirstOrDefault(x => x.Headers.ContentType != null &&
                                    (x.Headers.ContentType.MediaType.StartsWith("image/") ||
                                     x.Headers.ContentType.MediaType.Equals("application/pdf")));

            // Function to transform form content in object                         
            var transaction = await FormObject<Product>(provider);

            // Performs data processing, etc...
     }
试试看
{
如果(!Request.Content.IsMimeMultipartContent())
{
抛出新的HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
var provider=新的MultipartMemoryStreamProvider();
wait Request.Content.ReadAsMultipartAsync(提供程序);
var fileContent=provider.Contents.FirstOrDefault(x=>x.Headers.ContentType!=null&&
(x.Headers.ContentType.MediaType.StartsWith(“image/”)||
x、 Headers.ContentType.MediaType.Equals(“application/pdf”);
//函数转换对象中的表单内容
var事务=等待FormObject(提供者);
//执行数据处理等。。。
}
}`

错误发生在以下行:

wait Request.Content.ReadAsMultipartAsync(提供程序)

文件上传限制为5Mb(Angular2),在WebConfig中,我将请求和上传的大小限制为30Mb(以留出一定的空闲时间)

发生的例外情况如下:

StackTrace:位于System.Net.Http.HttpContentMultipartExtensions.d_u8.MoveNext() ---来自引发异常的上一个位置的堆栈结束跟踪--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中 在System.Net.Http.HttpContentMultipartExtensions.d_u0`1.MoveNext()中 ---来自引发异常的上一个位置的堆栈结束跟踪--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中 在Sisprec.Api.Controllers.TransacaoController.d_u12.MoveNext()中

InnerException:System.Web.HttpException(0x800703E3):客户端已断开连接。 位于System.Web.Hosting.IIS7WorkerRequest.EndRead(IAsyncResult asyncResult) 位于System.Web.HttpBufferlessInputStream.EndRead(IAsyncResult asyncResult) 在System.Threading.Tasks.TaskFactory
1.FromAsyncTrimPromise
1.Complete(t支持thisRef、Func`3 endMethod、IAsyncResult asyncResult、布尔要求同步) ---来自引发异常的上一个位置的堆栈结束跟踪--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中 在System.Net.Http.HttpContentMultipartExtensions.d_u8.MoveNext()中

现在我不知道该怎么办


非常感谢您提供的所有帮助。

您能否在调试模式下部署应用程序,以便获得有关错误的更多信息?听起来您的客户端似乎有网络问题。相同的错误。我是在调试模式下部署的。相同的信息,行中出现错误:
var provider=new MultipartMemoryStreamProvider();wait Request.Content.ReadAsMultipartAsync(提供程序)我将此行更改为:
var provider=wait Request.Content.ReadAsMultipartAsync()和相同的错误。