FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 3194|回复: 9

自己模仿FineUIMvc基础版新建项目运行时出现的小错误

[复制链接]
发表于 2019-5-27 09:39:08 | 显示全部楼层 |阅读模式
道行浅,无法理解,刚接触Mvc,
自己模仿FineUIMvc基础版新建项目运行时出现的小错误,错误不影响程序运行,但是也想解决。
请问为什么会导致发送 HTTP 标头后, 服务器无法追加标头。?
代码位置:_Layout.cshtml
27  <body class="@_bodyClass">
28    @Html.AntiForgeryToken()
29   @{
30        var pm = F.PageManager;
31        ....
32       }

***************************************
异常发生时间: 5/27/2019 9:21:52 AM
页面异常代号: 500
页面异常消息: Server cannot append header after HTTP headers have been sent.
异常类型: -2147467259
导致当前异常的 Exception 实例:  
导致异常的应用程序或对象的名称: System.Web
引发异常的方法: Void AppendHeader(System.String, System.String)
异常堆栈信息:    at System.Web.HttpResponse.AppendHeader(String name, String value)
   at System.Web.HttpResponseWrapper.AddHeader(String name, String value)
   at System.Web.Helpers.AntiXsrf.AntiForgeryWorker.GetFormInputElement(HttpContextBase httpContext)
   at System.Web.Helpers.AntiForgery.GetHtml()
   at System.Web.Mvc.HtmlHelper.AntiForgeryToken()
   at ASP._Page_Views_Shared__Layout_cshtml.Execute() in C:\Project\Mvc\Mvc_Web\Views\Shared\_Layout.cshtml:line 28
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
   at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
   at System.Web.WebPages.WebPageBase.<>c__DisplayClass40_0.<RenderPageCore>b__0(TextWriter writer)
   at System.Web.WebPages.HelperResult.WriteTo(TextWriter writer)
   at System.Web.WebPages.WebPageBase.Write(HelperResult result)
   at System.Web.WebPages.WebPageBase.RenderSurrounding(String partialViewName, Action`1 body)
   at System.Web.WebPages.WebPageBase.PopContext()
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
   at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
   at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
   at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<>c__DisplayClass2b.<BeginInvokeAction>b__1c()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult)
   at System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
   at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)
   at System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
   at System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)
   at System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult)
   at System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
   at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
   at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
异常消息: Server cannot append header after HTTP headers have been sent.
***************************************

发表于 2019-5-27 15:07:31 | 显示全部楼层
请把完整项目源代码发上来,以便调试解决问题
 楼主| 发表于 2019-5-27 16:12:35 | 显示全部楼层
sanshi 发表于 2019-5-27 15:07
请把完整项目源代码发上来,以便调试解决问题

https://share.weiyun.com/56GddaA
文件太大,劳烦移步至此下载
发表于 2019-5-27 16:42:16 | 显示全部楼层
Kevin_feng 发表于 2019-5-27 16:12
https://share.weiyun.com/56GddaA
文件太大,劳烦移步至此下载

已测试。你这个问题刚好用我前几天发的一个经验分享可以解决:https://fineui.com/bbs/forum.php?mod=viewthread&tid=22087
代码改为:
  1. public class LoginCheckFilterAttribute : ActionFilterAttribute
  2.     {
  3.         /// <summary>
  4.         /// 登录状态检查
  5.         /// </summary>
  6.         public bool IsLoginCheck { get; set; }

  7.         public override void OnActionExecuting(ActionExecutingContext filterContext)
  8.         {
  9.             base.OnActionExecuting(filterContext);

  10.             //校验用户是否已经登录
  11.             if (IsLoginCheck && filterContext.HttpContext.Session["LoginUserBO"] == null)
  12.             {
  13.                 //跳转到登陆页
  14.                 filterContext.HttpContext.Response.Redirect("/UserLogin/Index");

  15.                 filterContext.Result = FineUIMvc.UIHelper.Result();
  16.             }
  17.         }
  18.     }
复制代码



 楼主| 发表于 2019-5-28 10:05:49 | 显示全部楼层
sanshi 发表于 2019-5-27 16:42
已测试。你这个问题刚好用我前几天发的一个经验分享可以解决:https://fineui.com/bbs/forum.php?mod=vie ...

谢谢您的解答,但是问题在我这还没解决。
按照你的提示,在筛选器处设置操作返回结果“UIHelper.Result();”
运行时依然会捕捉到错误“Server cannot set content type after HTTP headers have been sent. ”(表面不影响网站运行)
发表于 2019-5-28 10:31:09 | 显示全部楼层
Kevin_feng 发表于 2019-5-28 10:05
谢谢您的解答,但是问题在我这还没解决。
按照你的提示,在筛选器处设置操作返回结果“UIHelper.Result() ...

我有测试,添加后不会报错了。因为设置fliterContext.Result之后,请求就终止了。
 楼主| 发表于 2019-5-28 10:55:26 | 显示全部楼层
sanshi 发表于 2019-5-28 10:31
我有测试,添加后不会报错了。因为设置fliterContext.Result之后,请求就终止了。 ...

我也觉得奇怪,我再检查检查代码,谢谢您帮忙。
 楼主| 发表于 2019-5-31 16:16:58 | 显示全部楼层
sanshi 发表于 2019-5-28 10:31
我有测试,添加后不会报错了。因为设置fliterContext.Result之后,请求就终止了。 ...

您好,我想问一下,在IFrame里面触发页面重定向,有没有方法控制器在重定向时,刷新的是最顶层页,而不是嵌套在IFrame里面的页。
发表于 2019-6-3 10:17:00 | 显示全部楼层
 楼主| 发表于 2019-6-3 11:36:40 | 显示全部楼层
sanshi 发表于 2019-6-3 10:17
常见问题第37条:https://fineui.com/bbs/forum.php?mod=viewthread&tid=655

我知道这跟FineUI没关系,我目前也是用这种方法解决问题,原本我以为Mvc或者FineUI有其他方法处理这问题才这样提问的,因为刚接触Mvc,不了解,感谢您的回答。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-3-29 20:07 , Processed in 0.049678 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表