【问题标题】:ASP.NET: Get *real* raw URLASP.NET:获取 *real* 原始 URL
【发布时间】:2010-10-21 08:42:27
【问题描述】:

在 ASP.NET 中,有没有办法获取 real 原始 URL?

例如,如果用户浏览到“http://example.com/mypage.aspx/%2F”,我希望能够获得“http://example.com/mypage.aspx/%2F”而不是“http://example.com/mypage.aspx//”。

我当然想要一种干净的方式来做到这一点,但我可以接受一种使用反射或访问晦涩属性的 hacky 方法。

目前,我尝试在 Authorization-header 中使用 uri(有效),但我不能依赖它始终存在。

编辑:

我真正想做的是能够区分“http://example.com/mypage.aspx/%2F”和“http://example.com/mypage.aspx/%2F%2F”。

看起来 ASP.NET 首先将“%2F%2F”转换为“//”,然后将斜杠转换为单个斜杠。

所以只是重新编码是行不通的。

【问题讨论】:

    标签: asp.net url url-encoding rawurl


    【解决方案1】:

    以下代码适用于我:

    IServiceProvider serviceProvider = (IServiceProvider)HttpContext.Current;
    HttpWorkerRequest workerRequest = (HttpWorkerRequest)serviceProvider.GetService(typeof(HttpWorkerRequest));
    string realUrl = workerRequest.GetServerVariable("HTTP_URL");
    

    请注意,这只适用于在 IIS 上运行而不是在 f.x 下运行。 ASP.NET 开发服务器!

    感谢Lucero 在另一个线程中的回答,感谢Zhaph 将我指向该线程。

    【讨论】:

    • 这是正确的解决方案。它解决了路径中存在编码时的问题。服务器变量中的 HTTP_URL 将显示解码版本,此解决方案提供正确的编码版本。
    • 这也返回了 IIS Express 下的预期结果
    【解决方案2】:

    Request.RawUrl 将返回应用程序相对路径(包括查询字符串信息),而Request.Url 将返回完整路径(包括查询字符串信息)。

    有关详细信息,请参阅“Making sense of ASP.NET paths”。

    【讨论】:

      【解决方案3】:
      【解决方案4】:

      我无法对此进行测试,因为它仅适用于 IIS,而不适用于 Visual Studio 中的 ASP.NET 开发服务器,但请尝试:

      Request.ServerVariables[ "HTTP_URL" ]

      【讨论】:

      • 这为我返回了预期的结果,尽管它确实需要结合 HTTP_HOST 和 HTTP_QUERY 来获取 URL 的其余部分。
      【解决方案5】:

      从请求中获取url,只对查询字符串部分进行urlencode,然后将它们连接起来

      【讨论】:

        【解决方案6】:

        我不能在这里测试,但这可能是你需要的:

        Request.Url.AbsoluteUri
        

        【讨论】:

          【解决方案7】:

          嗯,你可以把它编码回 url 编码的版本。

          【讨论】:

            【解决方案8】:
             Server.HtmlEncode(Request.RawUrl);
            

            原始 URL 定义为 URL 中域信息之后的部分。在 URL 字符串 http://www.contoso.com/articles/recent.aspx 中,原始 URL 是 /articles/recent.aspx。原始 URL 包括查询字符串(如果存在)。

            另见:link text

            【讨论】:

            • Request 中的任何 URL 都可能已被清除,Request.ServerVariables["HTTP_URL"] 更准确。
            猜你喜欢
            • 2018-02-09
            • 2015-03-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-01-07
            • 2020-11-29
            • 1970-01-01
            相关资源
            最近更新 更多