.net 为什么FormsAuthentication.RedirectFromLoginPage()以context.Response.Redirect(…,false)结尾?

.net 为什么FormsAuthentication.RedirectFromLoginPage()以context.Response.Redirect(…,false)结尾?,.net,asp.net,asp.net-mvc,forms-authentication,.net,Asp.net,Asp.net Mvc,Forms Authentication,我浏览了FormsAuthentication的源代码,发现它以 context.Response.Redirect(strUrl, false); “false”参数表示“不终止当前页面的执行” 为什么对FormsAuthentication.RedirectFromLoginPage()的调用不需要终止查看当前页面?调用此方法后的正确行为是什么?将“endResponse”设置为true意味着Response.Redirect()调用还强制调用Response.End() Response

我浏览了FormsAuthentication的源代码,发现它以

context.Response.Redirect(strUrl, false);
“false”参数表示“不终止当前页面的执行”

为什么对FormsAuthentication.RedirectFromLoginPage()的调用不需要终止查看当前页面?调用此方法后的正确行为是什么?

将“endResponse”设置为true意味着
Response.Redirect()
调用还强制调用
Response.End()

Response.End()
将立即将代码执行转移到Application_EndResponse事件,并在所有操作结束时引发
ThreadAbortException


基本上,如果将参数保留为false,则响应会更干净地“关闭”。如果您可以构造方法的逻辑,使其基本上在响应.Redirect()调用之后完成,就可以避免强制响应.End()时发生的所有奇怪的事情。

因此,在我的控制器中,在调用FormsAuthentication.RedirectFromLoginPage之后,我应该调用Response.End?或者返回EmptyResult()?(假设我必须从操作返回某些内容)返回EmptyResult[或null ActionResult]。从操作方法内调用Response.End()将导致跳过您注册的任何结果筛选器。在理想情况下,操作将返回RedirectFromLoginResult,其ExecuteSult()覆盖将包含对Response.Redirect()的调用。事实上,ASP.NET MVC 2默认AccountController模板正是这样做的。请编辑以上注释:RedirectFromLoginResult实际上从未进入MVC模板,很抱歉造成混淆。但在一个完美的世界里,它会在那里