【问题标题】:IIS modifies double slash to single slash in queryString在查询字符串中将双斜杠修改为单斜杠
【发布时间】:2012-06-23 05:40:19
【问题描述】:

我的问题如下: 我有一段代码充当网关,将请求路由到一个后端服务器或另一个。这段代码实际上是在一个 IHttpHandler 中实现的,它是在 404 上触发的;

伪代码如下:

    public void ProcessRequest(HttpContext context)
    {
        try
        {
            var absoluteUri = context.Request.Url.AbsoluteUri;

            //... clean URL to get the part that we need 

            string RedirectTo = ...;

            context.Response.Redirect(RedirectTo, false);                
        }
        catch (Exception ex)
        {
            ...
        }
    }

我的问题是,在到达此代码的 queryString 中有一些已加密(和编码)的参数。 不幸的是,对值的加密方式没有太多控制,并且一些加密的值包含连续的正斜杠。 例如:网站/12345?params=o//go4lia0%3d

当 IIS 收到请求时,双斜杠最初被编码 (%3d%3d)。

从逻辑上讲,IIS 没有找到相应的文档(这是预期的)并调用上面的处理程序。问题是在这个阶段,查询字符串已经被IIS解码,连续的2个斜杠变成了一个。这会导致解密查询字符串失败。

有没有办法告诉 IIS:请不要放双斜线?

一些澄清: - 此功能是生成发送给最终用户的链接,以便自动填充屏幕上的某些字段。我知道在 MVC 控制器中处理它可能更容易......也许我最终会这样做而不是触发 404。

  • 可以更改生成加密值的代码,使其不生成斜杠(这本来是个好主意,但已经发送了带有错误链接的电子邮件,所以有点太晚了...

谢谢

【问题讨论】:

    标签: url iis-7 http-status-code-404 httphandler


    【解决方案1】:

    你解决了这个问题吗?我不知道您是否可以告诉 IIS 不使用双斜杠,但您可以通过访问此服务器变量来解析原始未触及的 URL 以获取未修改的查询字符串值:

    HttpContext.Current.Request.ServerVariables["UNENCODED_URL"]
    

    我试过了,虽然双斜杠在 HttpContext.Current.Request.RawUrl 中消失了,但在 HttpContext.Current.Request.ServerVariables["UNENCODED_URL"] 中仍然存在。

    【讨论】:

    • 不,不幸的是,这个值给了我与 RawUrl 或 AbsoluteUri 相似的结果......无论如何,非常感谢,我想我会尝试所有的 ServerVariables,即使我非常确信是 IIS 删除URL 到达 HttpHandler 之前的双斜杠。
    • 其实我想我知道出了什么问题...双斜杠一开始不在查询字符串中,所以这就是 IIS 摆脱它的原因,我应该早点注意到这一点。跨度>
    • 如果不在QueryString中,我不确定有没有解决办法。我遇到了与您类似的问题,因此我使用了如上所述的 UNENCODED_URL 服务器变量,从而解决了问题。但是,发生这种情况的链接是通过电子邮件发送的,使用 Outlook 作为邮件客户端的人仍然存在问题,因为 Outlook 会清理电子邮件中的 URL,并去除双斜杠。它实际上做得太多了。
    • 我仔细检查过,它不在查询字符串中。使用 IIS 7 日志,我发现当查询命中 IIS 时(甚至在触发 404 之前),双斜杠就消失了。查询字符串不会发生这种情况。猜猜这是没有希望的,因为它可能是 IIS 和客户端之间的任何东西,所以......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    相关资源
    最近更新 更多