标准的HTTP重定向会导致浏览器请求指定的URL,代替原始的URL,这会导致一次额外的客户端到服务
端的往返。为了与我们的核心原则保持一致,最好避免这样的往返。
可以用下面的代码实现传统的302 found 重定向:
this.Response.Redirect(“~/pages/error.aspx”,true);
将第二个参数设为true,会导致运行时调用Response.End()终止当前的响应,这样反过来又会抛出
ThreadAbortException 异常。要避免这种开销,以及处理异常的骚扰,可以将该标记设为false。但
是,在这种情况下,ASP.NET和IIS管道会继续执行。可以通过调用CompleteRequest()方法告诉IIS跳
过剩下的事件。
HTTPContext.Current.ApplicationInstance.CompleteRequest();
在这种情况下,ASP.NET的事件会继续执行。跳过它们同样需要一些额外的代码。举个例子,可以调
用CompleteRequest()方法时设置一个标记,然后在覆盖的事件处理器里,在调用基类处理器之前检
查该标记是否设置。这或许可以作为公共基类的另一个任务。
当想要告诉浏览器有条件的获取特定页面时,这种类型的重定向是很有用的,比如在发生错误时,就
像前面的例子中那样。浏览器和代理不会缓存302 found 重定向 ,而且搜索引擎也不会跟踪它们。
也有永久重定向的情况,比如当一个页面被移除的时候。通常由IIS发起永久重定向更有效,因为使
用这种方式请求管道的剩余部分会短路。也可以使用编程方式发起,然后在.NET3.5中之前的版本,
没有永久重定向的版本的API,所以需要自行配置HTTP响应头,如下所示:
This.StatusCode=301;
This.Response.AddHeader(“Location”,”newpage.aspx”);
This.Response.End();
浏览器和代理会缓存永久重定向,而且搜索引擎还会跟踪它们。
最好看看HTTP重定向返回的文本,要确保尽可能返回较少的数据。即使浏览器不会显示重定向的主题
,但用户仍然可以使用像Fiddler这样的Web调试器看到。除了性能的影响,如果是因为安全的原因才
做重定向,并且忘记了终止后续的请求,你也许会将不愿用户看到的页面显示给了用户。
也可以在IIS中配置传统的重定向,这是用来为静态文件或那些不需要编程逻辑的情况下提供便利的
。本文由上海蓝友信息科技有限公司(diqsubz.cn)提供,转载请注明出处,谢谢!