Server.Transfer与Context.RewritePath

时间:2008-12-03 10:57:41

标签: asp.net url-rewriting

我知道他们都不会更改客户端看到的URL。是否有任何东西使其中一个优于另一个? 我打算在Global.asax的Application_BeginRequest中使用它,也可以在常规的aspx页面中使用它。

3 个答案:

答案 0 :(得分:9)

我认为Context.RewritePath()是更好的选择。 原因是:

Server.Transfer()每次都会抛出ThreadAbortException。调用Response.End()

的结果

有关详细信息,请阅读以下MS文章:

更多信息:
Server.Transfer()不会像Response.Redirect()那样发送HTTP 302重定向命令。

根据HttpContext.RewritePath on MSDNRewritePath()用于无Cookie会话状态。

另外,对于不同的主题,Server.Transfer()Server.Execute()非常不同:

Server.Execute()会在调用它之后立即将控件返回到初始页面。

例如:

<div>
    test 1 <br/>
    <% Server.Execute("include.aspx?hello=ok"); %>
    test 2 <br/>
</div>

输出:

  

测试1
   include.aspx的内容?hello = ok
  测试2

答案 1 :(得分:1)

Context.RewritePath指定内部重写路径,并允许请求的URL与资源的内部路径不同。 RewritePath用于无cookie会话状态。

而Server.transfer将为处理一个页面而组装的内容传输到另一个页面。

答案 2 :(得分:1)

为避免Server.Transfer抛出异常,您可以使用Server.Execute。 Server.Transfer和Server.Execute都不发出302 HTTP消息。只有Response.Redirect发出此标题并要求浏览器转到新目标,声称它已暂时移动。 Server.Transfer和Server.Execute都允许您执行不同的页面来为当前请求提供服务。