相关疑难解决方法(0)

Response.End()被认为是有害的吗?

这篇知识库文章说,ASP.NET Response.End()中止了一个帖子.

反射器显示它看起来像这样:

public void End()
{
    if (this._context.IsInCancellablePeriod)
    {
        InternalSecurityPermissions.ControlThread.Assert();
        Thread.CurrentThread.Abort(new HttpApplication.CancelModuleException(false));
    }
    else if (!this._flushing)
    {
        this.Flush();
        this._ended = true;
        if (this._context.ApplicationInstance != null)
        {
            this._context.ApplicationInstance.CompleteRequest();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎很苛刻.正如知识库文章所说,以下应用程序中的任何代码Response.End()都不会被执行,这违反了最不惊讶的原则.它几乎就像Application.Exit()在WinForms应用程序中.造成线程终止异常Response.End()不开捕,所以代码周围的try...... finally不会满足.

这让我想知道我是否应该总是避免Response.End().

任何人都可以建议,我什么时候应该使用Response.End(),何时Response.Close()何地HttpContext.Current.ApplicationInstance.CompleteRequest()

参考:Rick Strahl的博客文章.


根据我收到的输入,我的回答是,是的,Response.End是有害的,但在某些有限的情况下它是有用的.

  • 使用Response.End()作为一个不可捕获抛出,立即终止HttpResponse在特殊的条件.在调试过程中也很有用. 避免Response.End()完成常规反应.
  • 用于Response.Close()立即关闭与客户端的连接.根据此MSDN博客文章,此方法不适用于正常的HTTP请求处理. 你不太可能有充分的理由来调用这种方法.
  • 用于 …

.net asp.net

197
推荐指数
5
解决办法
8万
查看次数

使用Thread.Abort()有什么问题

所以我知道你不应该使用

Thread.Abort()
Run Code Online (Sandbox Code Playgroud)

但我从未得到过很好的解释.是否存在性能损失或隐藏的问题?

我知道你不能忽略/吞下ThreadAbortException(这是有道理的)

.net c# multithreading

62
推荐指数
5
解决办法
3万
查看次数

我们使用时线程正在中止

System.Threading.ThreadAbortException:线程正在中止.
在System.Threading.Thread.AbortInternal()处于System.Web.HttpResponse.End()的System.Threading.Thread.Abort(Object stateInfo)处System.Web.HttpResponse.Redirect(String url,Boolean endResponse)
. taxi.HttpResponse.Redirect(String url)at taxi_selection.lnkbtnconfirm_Click(Object sender,EventArgs e)

我发现解决方案就是这样

的Response.Redirect( "home.aspx",假); 但是这个错误再次发生.

对此有什么好的解决方案?

我的代码片段:

Response.Redirect("home.aspx",false);
Run Code Online (Sandbox Code Playgroud)

c# asp.net

14
推荐指数
3
解决办法
6万
查看次数

登录/注销时未清除ASP ASPXAUTH身份验证cookie

我正在使用ASP身份验证和集成的Web服务.

用户在登录页面上使用Forms身份验证登录.
要注销,我从Silverlight调用身份验证Web服务并调用logout.

一切都运行正常,但现在有时IE变得疯狂,不再登出用户.

我使用了Fiddler,事实证明,身份验证服务返回一个SetCookie来清除ASPXAUTH cookie,但在下一次调用时,IE仍然设置了cookie.
所以当然因为cookie在那里用户经过身份验证并重新登录而不是被定向到登录页面.

我检查过,没有看到任何其他问题的描述.我无法重现它,我的同事有一个行为不端的IE使它在一个环境中工作正常,而在另一个环境中没有(一个有DEV的问题而另一个有PreProd服务器的问题).

知道可能会发生什么吗?

asp.net authentication cookies internet-explorer

8
推荐指数
2
解决办法
9999
查看次数

我们可以使用Response.Flush()而不是Response.End()

Response.End()生成ThreadAbortException.

HttpContext.Current.ApplicationInstance.CompleteRequest它代替它并不能解决问题.

那么,我们可以使用Response.Flush()而不是Response.End()

c# asp.net response.redirect response httpcontext

3
推荐指数
1
解决办法
2万
查看次数