【发布时间】:2010-09-25 02:35:54
【问题描述】:
我知道他们都不会更改客户看到的 URL。它们中有什么东西使它们中的一个比另一个更受欢迎吗?
我打算在 Global.asax 的 Application_BeginRequest 中使用它,但也可以在常规的 aspx 页面中使用它。
【问题讨论】:
标签: asp.net url-rewriting
我知道他们都不会更改客户看到的 URL。它们中有什么东西使它们中的一个比另一个更受欢迎吗?
我打算在 Global.asax 的 Application_BeginRequest 中使用它,但也可以在常规的 aspx 页面中使用它。
【问题讨论】:
标签: asp.net url-rewriting
我认为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
【讨论】:
Context.RewritePath 分配内部重写路径并允许请求的 URL 与资源的内部路径不同。 RewritePath 用于无 cookie 会话状态。
而 Server.transfer 将为处理一个页面而组装的内容传输到另一个页面。
【讨论】:
为了避免Server.Transfer抛出的异常,可以使用Server.Execute。 Server.Transfer 和 Server.Execute 都不会发出 302 HTTP 消息。只有 Response.Redirect 发出此标头并要求浏览器转到新目的地,声称它被临时移动了。 Server.Transfer 和 Server.Execute 都允许您执行不同的页面来服务当前请求。
【讨论】: