我知道他们都不会更改客户端看到的URL。是否有任何东西使其中一个优于另一个? 我打算在Global.asax的Application_BeginRequest中使用它,也可以在常规的aspx页面中使用它。
答案 0 :(得分:9)
我认为Context.RewritePath()
是更好的选择。
原因是:
Server.Transfer()
每次都会抛出ThreadAbortException
。调用Response.End()
。
有关详细信息,请阅读以下MS文章:
更多信息:
Server.Transfer()
不会像Response.Redirect()
那样发送HTTP 302重定向命令。
根据HttpContext.RewritePath on MSDN,RewritePath()
用于无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都允许您执行不同的页面来为当前请求提供服务。