override Request.QueryString



大家好!

我想知道是否有可能覆盖。net请求。QueryString对象?如果可以做到这一点,而不必创建我自己的HTTP模块,那将是非常好的。

我的任务是RSA(1024)加密我应用程序中的所有查询字符串。然而,应用程序已经建立,有很多地方的查询字符串被设置,所以理想情况下,我想做一个全局的改变,将解密查询,并将其放在正常的请求。QueryString,这样就不必在任何地方改变我的代码,并且可能将它传递给我团队中的其他开发人员,他们也不必改变他们的代码。

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

所以现在我在一个阶段,我想,而不是重写路径,拦截或覆盖的请求。QueryString对象在全局级别,并使用我的解密方法,每当调用这个[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类仅用于说明目的…在现实中,你会调用Request。{ExtensionMethod}在asp.net web表单页面或MVC控制器的主体中,这些控制器已经通过Request属性提供了对HttpRequest对象的直接访问。

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

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

相关内容

  • 没有找到相关文章

最新更新