我的问题如下: 我有一段充当网关的代码,将请求路由到一台后端服务器或另一台。此代码实际上是在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中有一些加密(和编码)的参数。 不幸的是,对值加密的方式没有多少控制,加密的某些值包含连续的正斜杠。 例如:website / 12345?params = o // go4lia0%3d
当IIS收到请求时,双斜杠最初被编码(%3d%3d)。
逻辑上,IIS找不到相应的文档(预期的)并调用上面的处理程序。问题是,在此阶段,查询字符串已由IIS解码,并且2个连续斜杠转换为单个斜杠。这会导致解密查询字符串失败。
有没有办法告诉IIS:请单独留下双斜线?
几点澄清: - 此功能是生成发送给最终用户的链接,以便自动填充屏幕上的某些字段。我知道在MVC控制器中处理它可能更容易......也许我最终会这样做而不是触发404.
感谢
答案 0 :(得分:2)
你解决了这个问题吗?我不知道你是否可以告诉IIS单独留下双斜线,但你可以通过访问这个服务器变量来解析原始的未经修改的URL以获得未修改的查询字符串值:
HttpContext.Current.Request.ServerVariables["UNENCODED_URL"]
我试了一下,虽然在HttpContext.Current.Request.RawUrl中双斜线消失,它们仍然存在于HttpContext.Current.Request.ServerVariables [“UNENCODED_URL”]中。