FineUI 官方论坛

标题: 自己模仿FineUIMvc基础版新建项目运行时出现的小错误 [打印本页]

作者: Kevin_feng    时间: 2019-5-27 09:39
标题: 自己模仿FineUIMvc基础版新建项目运行时出现的小错误
道行浅,无法理解,刚接触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.
***************************************


作者: sanshi    时间: 2019-5-27 15:07
请把完整项目源代码发上来,以便调试解决问题
作者: Kevin_feng    时间: 2019-5-27 16:12
sanshi 发表于 2019-5-27 15:07
请把完整项目源代码发上来,以便调试解决问题

https://share.weiyun.com/56GddaA
文件太大,劳烦移步至此下载
作者: sanshi    时间: 2019-5-27 16:42
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.     }
复制代码




作者: Kevin_feng    时间: 2019-5-28 10:05
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. ”(表面不影响网站运行)
作者: sanshi    时间: 2019-5-28 10:31
Kevin_feng 发表于 2019-5-28 10:05
谢谢您的解答,但是问题在我这还没解决。
按照你的提示,在筛选器处设置操作返回结果“UIHelper.Result() ...

我有测试,添加后不会报错了。因为设置fliterContext.Result之后,请求就终止了。
作者: Kevin_feng    时间: 2019-5-28 10:55
sanshi 发表于 2019-5-28 10:31
我有测试,添加后不会报错了。因为设置fliterContext.Result之后,请求就终止了。 ...

我也觉得奇怪,我再检查检查代码,谢谢您帮忙。
作者: Kevin_feng    时间: 2019-5-31 16:16
sanshi 发表于 2019-5-28 10:31
我有测试,添加后不会报错了。因为设置fliterContext.Result之后,请求就终止了。 ...

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

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




欢迎光临 FineUI 官方论坛 (https://www.fineui.com/bbs/) Powered by Discuz! X3.4