Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Url IIS在queryString中将双斜杠修改为单斜杠_Url_Iis 7_Http Status Code 404_Httphandler - Fatal编程技术网

Url IIS在queryString中将双斜杠修改为单斜杠

Url IIS在queryString中将双斜杠修改为单斜杠,url,iis-7,http-status-code-404,httphandler,Url,Iis 7,Http Status Code 404,Httphandler,我的问题如下: 我有一段代码作为网关,将请求路由到一个或另一个后端服务器。这段代码实际上是在IHttpHandler中实现的,IHttpHandler是在404上触发的 伪代码如下: public void ProcessRequest(HttpContext context) { try { var absoluteUri = context.Request.Url.AbsoluteUri; //

我的问题如下: 我有一段代码作为网关,将请求路由到一个或另一个后端服务器。这段代码实际上是在IHttpHandler中实现的,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)
        {
            ...
        }
    }
我的问题是,在到达该代码的查询字符串中,有一些参数被加密(和编码)。 不幸的是,对值的加密方式没有太多的控制,一些加密的值包含连续的正斜杠。 例如:网站/12345?参数=o//go4lia0%3d

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

从逻辑上讲,IIS找不到相应的文档(这是预期的),并调用上面的处理程序。问题是在这个阶段,查询字符串已经被IIS解码,并且两个连续的斜杠转换为一个。这将导致解密查询字符串失败

有没有办法告诉IIS:请不要使用双斜杠

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

  • 生成加密值的代码可以更改,这样就不会生成斜杠(这在一开始是个好主意,但是已经有发送了不正确链接的电子邮件,所以太晚了

谢谢

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

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

我试过了,虽然双斜杠在HttpContext.Current.Request.RawUrl中消失了,但它们仍然存在于HttpContext.Current.Request.ServerVariables[“UNENCODED_URL”].

不,不幸的是,这个值给了我与RawUrl或AbsoluteUri类似的结果…非常感谢,我想我会尝试所有服务器变量,尽管我非常确信是IIS在URL到达HttpHandler之前删除了双斜杠。实际上,我想我知道怎么了…双斜杠不在查询字符串中首先,这就是为什么IIS放弃了它,我应该早就注意到了。如果它不在查询字符串中,我不确定是否有解决方案。我有一个与您类似的问题,所以我使用了如上所述的UNENCODED_URL server变量,解决了这个问题。但是,出现这种情况的链接是通过电子邮件发送的,并且使用Outlook作为邮件客户端仍然存在问题,因为Outlook会清理电子邮件中的URL,并去除双斜杠。实际上它做得有点太多了。我仔细检查了一下,但它不在查询字符串中。使用IIS 7日志,我发现当查询命中IIS时(甚至在触发404之前),双斜杠消失了。查询字符串不会出现这种情况。我想这是没有希望的,因为它可能是IIS和客户端之间的任何内容,所以。。。