【问题标题】:Issue with IHttpHandler and relative URLsIHttpHandler 和相对 URL 的问题
【发布时间】:2010-05-27 18:48:55
【问题描述】:

我开发了一个IHttpHandler 类并将其配置为verb="*" path="*",因此我正在使用它处理所有请求,以尝试为生成html 动态。

所以,当一个 .css 文件的请求到达时,我必须执行类似context.Response.WriteFile(Server.MapPath(url)) 之类的操作……对于图片等等,我必须自己响应所有内容。

我的主要问题是当我将相对 URL 放入锚点时;例如,我的主页上有一个类似 <a href="page1">Go to Page 1</a> 的链接,在第 1 页我有另一个链接 <a href="page2">Go to Page 2</a>。第 1 页和第 2 页应该处于同一级别(http://host/page1http://host/page2,但是当我单击转到第 2 页时,我在处理程序中得到了这个 url:~/page1/~/page2 ... 什么是痛苦,因为我必须做一个 url = url.SubString(url.LastIndexOf('~')) 来清理它,虽然我觉得没有什么问题而且这种行为是完全正常的。

现在,我可以应付它,但我认为将来这会让我有些头疼。我尝试使用context.Request.Url 的信息设置所有带有绝对 URL 的链接,但这也很痛苦 :D,所以我想知道是否有更好的方法来做这些事情。

请不要犹豫,给我非常明显的答复,因为我是 Web 开发的新手,可能我正在跳过一些关于 URL、Http 等的基本知识。

在此先感谢您的问候。

【问题讨论】:

  • url变量和context.Request.Url一样吗?
  • 用于包含 context.Request.AbsoluteApplicationPath 的 url 变量(我不记得该属性的确切名称)

标签: asp.net relative-path ihttphandler


【解决方案1】:

首先,我会看一下传递给浏览器的输出 HTML,特别是您所描述的链接。

您说链接是<a href="page2">Go to Page 2</a>,但根据您的结果,我猜它更像<a href="~/page2">Go to Page 2</a>。 您可以通过在处理程序中放置一个刹车点来确认这一点,当它使用“~/page1/~/page2”触发时,在浏览器的地址栏中查看它应该显示类似“http://www.example.com/ page1/~/page2"

您应该首先查看生成链接的代码。如果它是通过某种函数调用生成的,请确保获取的是 Web 地址而不是脚本地址。

在任何情况下,这些在第一级页面之间切换的链接都应该以“/”开头,表示它们的位置是相对于您网站的根目录而不是相对于当前显示的页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-04
    • 2011-01-21
    • 2011-05-02
    • 2011-04-29
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 2018-01-01
    相关资源
    最近更新 更多