C# 在发送HTTP头并上载文件后,服务器无法追加头
我在asp.net mvc 5 c#web应用程序中间歇性地遇到此异常: 发送HTTP标头后,服务器无法追加标头 它只是碰巧将图像上传到S3方法(WebAPI控制器) Global.asax中的PresendRequestHeaderC# 在发送HTTP头并上载文件后,服务器无法追加头,c#,asp.net-mvc,C#,Asp.net Mvc,我在asp.net mvc 5 c#web应用程序中间歇性地遇到此异常: 发送HTTP标头后,服务器无法追加标头 它只是碰巧将图像上传到S3方法(WebAPI控制器) Global.asax中的PresendRequestHeader protected void Application_PreSendRequestHeaders(object sender, EventArgs e) { HttpApplication app = sender as H
protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
{
HttpApplication app = sender as HttpApplication;
if (app != null &&
app.Context != null)
{
app.Context.Response.Headers.Remove("Server");
}
}
触发错误的方法:
[HttpPost]
[Route("UploadImageJSON")]
public IHttpActionResult UploadImageJSON(HttpRequestMessage request)
{
var httpRequest = HttpContext.Current.Request;
// Check if files are available
if (httpRequest.Files.Count != 1) return BadRequest();
var postedFile = httpRequest.Files[0];
var contentType = postedFile.ContentType;
if (!contentType.Contains("image"))
{
return StatusCode(HttpStatusCode.NotAcceptable);
}
var keyUploadFiles = Constants.UrlS3Amazon +
S3.UploadToS3WithStream(postedFile.InputStream, contentType);
return Json(JsonConvert.SerializeObject(keyUploadFiles));
}
编辑:更多信息。。。我将我的Web应用托管在带有负载平衡器的Elastic BeanStalk中,负载平衡器安装了SSL证书,负载平衡器与EC2实例之间的连接位于端口80中。也许会有帮助
艾玛日志:
System.Web.HttpException(0x80004005):发送HTTP标头后,服务器无法追加标头。
位于System.Web.HttpHeaderCollection.SetHeader(字符串名称、字符串值、布尔替换)
位于Microsoft.Owin.Host.SystemWeb.CallHeaders.AspNetResponseHeaders.Set(字符串键,字符串[]值)
在Microsoft.Owin.Infrastructure.OwinHelpers.AppendHeaderUnmodified(IDictionary2标题,字符串键,字符串[]值)
在Microsoft.Owin.ResponseCookieCollection.Append(字符串键、字符串值、CookieOptions)
在Microsoft.Owin.Security.Cookies.CookieAuthenticationHandler.d_ub.MoveNext()中
---来自引发异常的上一个位置的堆栈结束跟踪---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在Microsoft.Owin.Security.Infrastructure.AuthenticationHandler.d_u8.MoveNext()中
---来自引发异常的上一个位置的堆栈结束跟踪---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在Microsoft.Owin.Security.Infrastructure.AuthenticationHandler.d_u5.MoveNext()中
---来自引发异常的上一个位置的堆栈结束跟踪---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在Microsoft.Owin.Security.Infrastructure.AuthenticationMiddleware上
---来自引发异常的上一个位置的堆栈结束跟踪---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在Microsoft.AspNet.Identity.Owin.IdentityFactoryMiddleware2.d_u0.MoveNext()上
---来自引发异常的上一个位置的堆栈结束跟踪---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在Microsoft.AspNet.Identity.Owin.IdentityFactoryMiddleware上
---来自引发异常的上一个位置的堆栈结束跟踪---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
位于Microsoft.AspNet.Identity.Owin.IdentityFactoryMiddleware`2.d_u0.MoveNext()
---来自引发异常的上一个位置的堆栈结束跟踪---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在Microsoft.Owin.Mapping.MapMiddleware.d_u0.MoveNext()中
---来自引发异常的上一个位置的堆栈结束跟踪---
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()中
位于Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContext.EndFinalWork(IAsyncResult ar)
在System.Web.HttpApplication.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()中
在System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔值&同步完成)
谢谢 您是否尝试过删除app.Context.Response.Headers.Remove(“服务器”);我认为这就是问题所在?每次使用您的方法上传图像时,它都会出现?因为您在开始时说这是一个间歇性问题…您有响应通过的http模块吗?堆栈跟踪显示代码通过Microsoft.Owin.Security.Infrastructure.AuthenticationMiddleware
和Microsoft.Owin.Security.Cookies.Cookie AuthenticationHandler
。您的身份验证流是如何设置的?好问题。我看到了一个类似的间歇性错误,AFAICT与我的任何代码都没有关系,但它的堆栈中充满了Microsoft.Owin.Security
和Microsoft.AspNet.Identity.Owin
方法调用。在我的例子中,“流是如何设置的?”是“它是如何从AspNet.Identity框中出来的”。似乎在UploadToS3WithStream方法中发生了异常,因此您需要显示该方法的代码。