14

我知道他们都不会更改客户看到的 URL。它们中有什么东西使它们中的一个比另一个更受欢迎吗?
我打算在 Global.asax 的 Application_BeginRequest 中使用它,但也可以在常规的 aspx 页面中使用它。

4

3 回答 3

10

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

Server.Transfer()ThreadAbortException每次抛出一个。调用的结果Response.End()

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

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

根据MSDN 上的 HttpContext.RewritePathRewritePath()用于无 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的内容

于 2008-12-03T11:03:10.090 回答
1

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

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

于 2008-12-03T11:07:36.617 回答
1

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

于 2008-12-03T11:18:23.973 回答