我在Angular2中创建了一个表单,它使用表单数据发送POST请求并将文件上传到webapi控制器。 但是我有一点问题。
我系统的一些用户(访问我公司网络以外的系统)在20%的尝试中提交表单,发生错误(我在NLog注册)。 但是,如果我尝试在公司网络中提交具有相同数据和相同文件的表单,那么一切都很完美(100%尝试)。
然而,错误是间歇性的,它平均发生在10个请求中的2个,并且只发生在公司网络外部访问系统的用户。
我的C#控制器: `public async Task 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...
}
}`
错误发生在该行:
Await Request.Content.ReadAsMultipartAsync (provider);
文件上传限制为5Mb(在Angular2中),在WebConfig中,我限制了请求的大小,上传到30Mb(留下一定的松弛)。
发生的异常如下:
System.Net.Http.HttpContentMultipartExtensions.d__8.MoveNext()中的StackTrace: ---从抛出异常的先前位置开始的堆栈跟踪结束--- 在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在System.Net.Http.HttpContentMultipartExtensions.d__0`1.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- 在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在Sisprec.Api.Controllers.TransacaoController.d__12.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(TInstance thisRef,Func`3 endMethod,IAsyncResult asyncResult,Boolean requiresSynchronization)
---从抛出异常的先前位置开始的堆栈跟踪结束---
在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)
在System.Net.Http.HttpContentMultipartExtensions.d__8.MoveNext()
现在我不知道该怎么做。
非常感谢您的帮助。