高效的使用 Response.Redirect解决一些不必要的问题

高效的使用 Response.Redirect解决一些不必要的问题本文主要介绍如何高效地使用Response。重定向解决一些不必要的问题。有需要的朋友可以参考一下。简介:我正在评估一个ASP.NET网络项目的申请。它有一些可扩展性问题。意思是当网站访问量增加的时候。系统会变慢。当我查看申请记录时。我发现了很多ThreadAbortException。这个应用程序使用了大量的响应。重定向(是的,endResponse=true),这是可伸缩性问题的根源。在响应中endResponse=false。重定向,这个问题就解决了,但是会在应用中造成一些奇怪的问题。因为应用程序会假设响应。重定向将在当前页面停止执行。此外,您需要处理一些安全风险,因为您的应用程序假定页面事件永远不会被重定向。在这篇文章中,我将告诉一个简单的方法来解决这些问题,并取得良好的性能。描述:例如,如果您有一个web表单,您需要验证一些条件,并在条件不匹配时重定向用户进行跳转。复制代码如下:protected void page _ load(object sender,eventargs e) {var condition=.如果(!条件){响应。重定向( some page . aspx );}} protected void BTN save _ click(对象发送方,eventargs e){//在此保存数据}这是好的,但是会影响可伸缩性。因为它将终止线程池。现在,只需将response . redirect( unauthorized . aspx )替换为response . redirect( unauthorized . aspx ,false)。这将解决线程终止的问题,但不会停止当前页面的生命周期。也就是说,您需要确保btnSave_Click事件(以及所有其他页面时间),因为只要btnSave_Click事件被允许执行,任何人都可以轻松地发送POST请求。为了解决这个问题,我建议使用RedirectUser扩展方法。复制代码如下:公共静态类httpresponse扩展{公共静态void重定向用户(this httpresponse,string URL){ if(response . isrequestbeingredirected)返回;回应。重定向(url,false);var context=HttpContext。当前;如果(上下文!=null) { context。application instance . complete request();} } }公共分部类WebForm : System。web . ui . Page { protected void Page _ Load(object sender,EventArgs e) { var condition=.如果(!条件){响应。redirect user( unauthorized . aspx );} } protected void btnSave_Click(对象发送方,EventArgs e) { if(响应。IsRequestBeingRedirected){ return;} //在此保存数据}}使用RedirectUser的第一个好处是,它会首先使用response . redirect(with end response=false)方法,这种方法对于应用程序来说具有很好的可扩展性。第二个好处是,在你多次调用这个方法之后,它不会覆盖之前的响应。重定向(如果有)。第三个好处是它会调用HTTP应用。CompleteRequest处理ASP.NET运行时传递的所有事件,并过滤HTTP管道信息(不是页面生命周期管道信息)。另外需要注意检查btnSave_Click事件中的response . isrequestbeingredirected。也希望大家能检查一下response . isrequestbeingredirected中的所有内部控件,复制代码如下:formid= form 1 runat= server % if(!回应。IsRequestBeingRedirected){ % ASP:Button ID= BTN Save runat= server Text= Save OnClick= BTN Save _ Click /%-所有其他控件-% %-所有其他控件-% %-所有其他控件-% % % } %/形成另一个你需要注意的事情,当你使用一个复杂的控件(像GridView,RadGrid等)有选择,插入,更新,删除事件的功能时,当response . isrequestbeingredirected为true时,必须取消这些事件的操作(插入、更新或删除)。以下是复制代码示例:Protected Void GridView 1 _ RowEditing(对象发送方,GridViewEditEventArgs e) { if(响应。IsRequestBeingRedirected){ e . Cancel=true;返回;}}摘要:在本文中,我将向您展示如何使用Response。重定向我也发现了一些风险问题。回应。可以采用重定向优化和技术来降低风险。我也希望你喜欢这篇文章。

高效的使用 Response.Redirect解决一些不必要的问题