首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖Request.QueryString

覆盖Request.QueryString
EN

Stack Overflow用户
提问于 2013-03-16 22:33:48
回答 1查看 1.1K关注 0票数 1

大家好,经验丰富的开发人员朋友们!

我想知道是否有可能以某种方式覆盖.Net Request.QueryString对象?如果不需要创建自己的HTTP模块就能做到这一点,那就太好了。

我的任务是使用RSA(1024)对应用程序中的所有查询字符串进行加密。然而,应用程序已经构建,并且有很多地方设置了查询字符串,所以理想情况下,我希望进行全局更改,将查询解密并将其放入普通的Request.QueryString中,这样就不必到处更改代码,也许还可以将其传递给团队中的其他开发人员,他们也不必更改代码。

现在,我已经构建了加密对象,并使用盐的SessionID使每个会话的密钥是唯一的。我也尝试过在Global.asax中截取HTTP请求,以便用解密的查询重写请求路径,然而,这是失败的,因为在这些页面上执行的任何回发都会将解密的查询字符串放回POST中,这显然不是我想要的。

因此,现在我不想重写路径,而是在全局级别上拦截或覆盖Request.QueryString对象,并在调用此密钥时在那里使用我的解密方法,从而再次不必停止使用Request.QueryString。然而,在网上搜索了几个小时后,我找不到一个关于如何做到这一点的例子……

如果有人能帮我解决这个问题,我将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2013-12-20 04:00:25

我认为最简单的方法是使用扩展方法。可能是这样的:

代码语言:javascript
复制
    class Program 
{
    static void Main() 
    {
        var decryptedValue = HttpContext.Current.Request.DecryptQueryStringParam("myParam");
    }
}

public static class HttpRequestExtensions 
{
    public static string DecryptQueryStringParam(this HttpRequest extendee, string name)
    {
        // do stuff to decrypt
        return DecryptMethodStub(extendee.QueryString[name]);
    }

    private string DecryptMethodStub(string queryString)
    {
        return "something decrypted the string";
    }
}

请注意,上面的Program类仅用于说明目的...实际上,您需要在MVC窗体页面或asp.net控制器的主体中调用Request.{ExtensionMethod},这些控件已经通过Request属性提供了对HttpRequest对象的直接访问。

以下是关于扩展的一些信息:

http://msdn.microsoft.com/en-us/library/bb383977.aspx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15450505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档