我的问题如下:我有一段代码充当网关,将请求路由到一个后端服务器或另一个。这段代码实际上是在一个 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。
- 可以更改生成加密值的代码,使其不生成斜杠(这本来是个好主意,但是已经发送了带有错误链接的电子邮件,所以为时已晚......
谢谢