C# 发送HTTP标头后,服务器无法设置内容类型-执行的子请求时出错
这是我第一次在stackoverflow中提出问题,我知道其他人已经提出了这个问题,但我的问题不同,因为我已经做了其他类似问题的建议,但仍然得到了相同的错误 以下是我在ApicController中的代码:C# 发送HTTP标头后,服务器无法设置内容类型-执行的子请求时出错,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,这是我第一次在stackoverflow中提出问题,我知道其他人已经提出了这个问题,但我的问题不同,因为我已经做了其他类似问题的建议,但仍然得到了相同的错误 以下是我在ApicController中的代码: [HttpGet] [Route("GenerateReport")] public IHttpActionResult GenerateReport() { try { byte[] bytes = G
[HttpGet]
[Route("GenerateReport")]
public IHttpActionResult GenerateReport()
{
try
{
byte[] bytes = Generate();
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.Clear();
response.ClearHeaders();
response.BufferOutput = true;
response.AppendHeader("Content-Type", "application/pdf");
response.AppendHeader("Content-Disposition", "attachment;filename=test.pdf;");
//response.Flush();
response.BinaryWrite(bytes.ToArray());
response.End();
//HttpContext.Current.ApplicationInstance.CompleteRequest();
return Ok(response);
}
catch (Exception ex)
{
throw ex;
}
}
它成功地下载了文件,但仍然出错,因为我们有一个现有的代码将应用程序重定向到error.aspx,并从那里显示错误
void application_Error(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
var exception = application.Server.GetLastError();
if (exception is HttpException)
{
HttpException httpEx = (HttpException)exception;
if (httpEx.GetHttpCode() == 404)
{
//application.Server.ClearError();
//HttpContext.Current.Response.TrySkipIisCustomErrors = true;
HttpContext.Current.Response.StatusCode = 404;
//Trace.WriteLine("404 for " + HttpContext.Current.Request.Url);
//throw new ApplicationException("fadsasdfasdfasdfasf");
//HttpContext.Current.Server.Transfer("~/Four04.ashx");
return;
}
}
if (exception is ThreadAbortException)
{
if (exception.StackTrace.Contains("System.Web.HttpResponse.Redirect(String url, Boolean endResponse, Boolean permanent)"))
{
// ThreadAbortException following a Response.Redirect()
// Do not bother, it is native
return;
}
}
LogException(exception.GetExplicitBaseException(), application.Context);
application.Server.Transfer(CoreWebApplication.Current.ErrorPageUrl);
}
您可以使用以下代码来设置正确的响应。 我相信您会得到错误,因为您正在修改HttpContext响应(但是,不要引用我的话) 感谢:
[HttpGet]
[Route("GenerateReport")]
public HttpResponseMessage GenerateReport()
{
byte[] bytes = Generate();
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
var stream = new MemoryStream(bytes);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = "test.pdf"
};
return result;
}