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