繁体   English   中英

覆盖Request.QueryString

[英]override Request.QueryString

各位经验丰富的开发人员,大家好!

我想知道是否有可能以某种方式覆盖.Net Request.QueryString对象? 如果可以在不必创建自己的HTTP模块的情况下完成此操作,那将非常好。

我受命使用RSA(1024)对应用程序中的所有查询字符串进行加密。 但是,该应用程序已经构建完毕,并且在很多地方都设置了查询字符串,因此理想情况下,我想进行全局更改以解密该查询并将其放置在普通的Request.QueryString中,从而不必更改我的到处都可以编写代码,也可以将其传递给团队中的其他开发人员,他们也不必更改其代码。

现在,我已经建立了加密对象,并使用SessionID作为盐,使每个会话的密钥唯一。 我还尝试在Global.asax中拦截HTTP请求,以便使用解密后的查询重写请求路径,但是,由于在这些页面上执行的任何回发操作都将解密后的查询字符串放回POST中,所以这很失败。不想要

因此,现在我处于一个阶段,在此阶段中,我不想重写路径,而是在全局级别上拦截或覆盖Request.QueryString对象,并在每次放置this [key]的调用时使用我的解密方法,因此,不必停止使用Request.QueryString。 但是,在网上搜索了数小时之后,我找不到有关如何执行此操作的单个示例...

如果有人可以帮助我,我将不胜感激!

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

    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类仅出于说明目的...实际上,您将在asp.net Web表单页面或MVC控制器的主体内调用Request。{ExtensionMethod},这些控制器已经可以通过以下方式直接访问HttpRequest对象:请求属性。

这是有关扩展的一些信息:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM