2

我正在尝试将数据表导出到电子表格。我得到了这个例外

Server cannot set status after HTTP headers have been sent.

在这条线上

httpContext.Response.StatusCode = ex is HttpException ? ((HttpException)ex).GetHttpCode() : 500;

请帮助我能做些什么来解决这个问题......

作为参考,我在这里添加完整代码:::: 导出函数的代码是

   public static void ExportToSpreadsheet(DataTable table, string name)
            {
                HttpContext context = HttpContext.Current;
                context.Response.Clear();

                foreach (DataColumn column in table.Columns)
                {
                    context.Response.Write(column.ColumnName + ";");
                }

                context.Response.Write(Environment.NewLine);

                foreach (DataRow row in table.Rows)
                {
                    for (int i = 0; i < table.Columns.Count; i++)
                    {
                        context.Response.Write(row[i].ToString().Replace(";", string.Empty) + ";");
                    }
                    context.Response.Write(Environment.NewLine);
                }

                string saveAsFileName = string.Format("Results-{0:d}.xls", DateTime.Now);

                context.Response.ContentType = "application/vnd.ms-excel";
                context.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", saveAsFileName));
                context.Response.End();
            }

异常global.asax.csApplication_Error函数中被捕获

protected void Application_Error(object sender, EventArgs e)
        {
            var httpContext = ((MvcApplication)sender).Context;
            //var currentController = " ";
            //var currentAction = " ";
            string currentController;
            string currentAction;
            var currentRouteData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(httpContext));
            currentController = "";
            currentAction = "";
            if (currentRouteData != null)
            {
                if (currentRouteData.Values["controller"] != null && !String.IsNullOrEmpty(currentRouteData.Values["controller"].ToString()))
                {
                    currentController = currentRouteData.Values["controller"].ToString();
                }

                if (currentRouteData.Values["action"] != null && !String.IsNullOrEmpty(currentRouteData.Values["action"].ToString()))
                {
                    currentAction = currentRouteData.Values["action"].ToString();
                }
            }
            else
            {
                currentController = "Home";
                currentAction = "Index";
            }

            var ex = Server.GetLastError();
            var controller = new ErrorController();
            var routeData = new RouteData();
            var action = "Error";

            if (ex is HttpException)
            {
                var httpEx = ex as HttpException;

                switch (httpEx.GetHttpCode())
                {
                    case 400:
                        action = "BadRequest";
                        break;

                    case 401:
                        action = "Unauthorized";
                        break;

                    case 403:
                        action = "Forbidden";
                        break;

                    case 404:
                        action = "NotFound";
                        break;

                    case 408:
                        action = "RequestTimeout";
                        break;

                    case 500:
                        action = "InternalServerError";
                        break;

                    case 502:
                        action = "BadGateway";
                        break;

                    case 503:
                        action = "ServiceUnavailable";
                        break;

                    case 504:
                        action = "GatewayTimeout";
                        break;
                }
            }

            httpContext.ClearError();
            httpContext.Response.Clear();
            // on this below line exception occurs
            httpContext.Response.StatusCode = ex is HttpException ? ((HttpException)ex).GetHttpCode() : 500;
            httpContext.Response.TrySkipIisCustomErrors = true;

            routeData.Values["controller"] = "Error";
            routeData.Values["action"] = action;

            controller.ViewData.Model = new HandleErrorInfo(ex, currentController, currentAction); 
            ((IController)controller).Execute(new RequestContext(new HttpContextWrapper(httpContext), routeData));

            // to set error details in HandleErrorInfo model to send email notification
            ErrorController.setHandleErrorInfoModel(new HandleErrorInfo(ex, currentController, currentAction));                
        }
4

0 回答 0