【问题标题】:Server.Transfer vs. Context.RewritePathServer.Transfer 与 Context.RewritePath
【发布时间】:2010-09-25 02:35:54
【问题描述】:

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

【问题讨论】:

    标签: asp.net url-rewriting


    【解决方案1】:

    我认为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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2010-11-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-11
          相关资源
          最近更新 更多