gpt4 book ai didi

url - IS 将查询字符串中的双斜杠修改为单斜杠

转载 作者:行者123 更新时间:2023-12-02 02:14:47 26 4
gpt4 key购买 nike

我的问题如下:我有一段代码充当网关,将请求路由到一个或另一个后端服务器。这段代码实际上是在 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 Controller 中处理它可能更容易……也许我最终会这样做而不是触发 404。

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

谢谢

最佳答案

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

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

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

关于url - IS 将查询字符串中的双斜杠修改为单斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11130512/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com