我知道他们都不会更改客户看到的 URL。它们中有什么东西使它们中的一个比另一个更受欢迎吗?
我打算在 Global.asax 的 Application_BeginRequest 中使用它,但也可以在常规的 aspx 页面中使用它。
3 回答
我认为Context.RewritePath()
是更好的选择。原因:
Server.Transfer()
ThreadAbortException
每次抛出一个。调用的结果Response.End()
。
有关更多详细信息,请阅读以下 MS 文章:
- 如果使用 Response.End、Response.Redirect 或 Server.Transfer,则会发生 ThreadAbortException
- MSDN 上的 HttpServerUtility.Transfer 方法
更多信息:
Server.Transfer()
不发送 HTTP 302 重定向命令Response.Redirect()
。
根据MSDN 上的 HttpContext.RewritePath,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的内容
Context.RewritePath 分配内部重写路径并允许请求的 URL 与资源的内部路径不同。RewritePath 用于无 cookie 会话状态。
而 Server.transfer 将为处理一个页面而组装的内容传输到另一个页面。
为了避免 Server.Transfer 抛出的异常,可以使用 Server.Execute。Server.Transfer 和 Server.Execute 都不会发出 302 HTTP 消息。只有 Response.Redirect 发出此标头并要求浏览器转到新目的地,并声称它已被临时移动。Server.Transfer 和 Server.Execute 都允许您执行不同的页面来服务当前请求。