【问题标题】:Server.Transfer doesn't update all pathsServer.Transfer 不会更新所有路径
【发布时间】:2012-05-18 06:22:42
【问题描述】:

使用Server.Transfer 显示一个页面,通知用户网站处于维护模式。
在 global.asax:

void Application_BeginRequest(object sender, EventArgs e)
{
    if (Request.IsLocal)
        return;

    if (ConfigurationManager.AppSettings["MaintenanceMode"] == "true")
    {
        if (Request.AcceptTypes != null && Request.AcceptTypes[0] == "text/html")
            Server.Transfer("~/UserMessage.aspx?Maintenance");
    }
}  

运行良好,但查看页面源代码时我发现 CSS 路径已更新但图像路径未更新。
有什么建议吗?

【问题讨论】:

  • 不是一个直接的答案,但你为什么不直接在 web 根目录中放置一个 app_offline.htm,无论你想要什么内容。这会得到你所期望的行为(除非UserMessage.aspx 做了一些动态的事情,这是不可用的)
  • 你的意思是css里面的图片路径?我希望不是:)
  • UserMessage.aspx 显示各种消息,包括处于维护模式。在页面内部,我使用的是单个图像,而不是在 CSS 内部。 Server.Transfer命令改变了css路径,但是图片的路径没有改变。

标签: asp.net server.transfer


【解决方案1】:

我会在应用程序根目录中使用app_offline.htm 或者至少Response.Redirect 如果我是你,Server.Transfer 不会更改 HTTP 地址,因此你必须小心将所有资产重定向到底层页面或将所有地址设为绝对地址

【讨论】:

  • 当使用Response.Redirect时,页面找不到css和图片。为此,我尝试了Server.Transfer
  • 你是如何定义你的css/images的,你使用的是相对路径吗?我想你需要让你的资源绝对,至少对于登录/维护页面
  • 路径都是相对的。 absolute 你的意思是给整个http://www.whatever.com url?它会起作用,但我试图避免这种情况。
  • 不,我的意思是完全像上面那样使用,这是一个绝对路径:“~/UserMessage.aspx?Maintenance”如果你使用的是Server.Transfer,那么页面url(这不是正确的) ) 用于页面资产(图像/脚本,...),如果它们使用相对路径
  • 不起作用,css 路径得到正确更新,但图像路径保持原样 (<img src="~/Images/logo.jpg" alt="" />) 并且找不到。也许解决方案是在页面加载时从代码隐藏中编写路径。
【解决方案2】:

server.transfer 实际上是停止执行一个页面并开始执行另一个页面,即您给它的页面。

结果是用户在同一个url下看到了不同的页面。

这与图片路径无关。此外,图像不是从 asp.net 传递的,除非您将偶数图像设置为从 asp.net 处理传递。此外,在您提供给我们的代码中,如果它们是图像,则不会进行任何传输,但您检查text/html

现在,如果您将执行移动到不同的 css,图像路径不会改变,只有用户看到的页面会改变。

也许你的意思是你使用了 MapPath() 并且这不会根据新目录而改变?

【讨论】:

  • 我正在尝试覆盖登录过程并显示维护模式消息。该位置仍在Account(login.aspx 页面所在的位置),但我无法更改它,所以我尝试了Server.Transfer。我只更改text/html,否则连css都找不到。
  • 想用app_offline.htm
  • 我没有在我的代码中的任何地方使用MapPath()UserMessage.aspx 显示各种消息,包括处于维护模式。尝试有点通用...
猜你喜欢
  • 2018-12-26
  • 2023-02-03
  • 2020-08-07
  • 2016-05-27
  • 1970-01-01
  • 2019-02-08
  • 2023-03-10
  • 2016-01-21
  • 2014-08-22
相关资源
最近更新 更多