-->

覆盖的Request.QueryString(override Request.QueryStrin

2019-10-17 20:04发布

你好老乡经验丰富的开发商!

我在想,如果有可能以某种方式覆盖的.Net的Request.QueryString对象? 这将是非常好的,如果这可以在不必创建自己的HTTP模块,以及完成。

我一直负责RSA(1024)在我的应用程序加密所有的查询字符串。 但是,应用程序已经建成有地方查询字符串被设置成理想我想提出,将解密的查询,并将其放置在正常的Request.QueryString一个全球性的变化,从而不会有改变的地方很多我代码随处可见,也许把它传递给其他开发者我的团队中,他们也没有改变他们的代码。

现在,我已经建立了加密对象,并使用的SessionID的盐,使每个会话密钥是唯一的。 我也试图拦截在Global.asax中的HTTP请求,以便与解密的查询重写请求路径,不过,这是一个胸围为被执行的任何回传在这些网页上把解密的查询字符串后面进入后,我明显不想。

所以,现在我在一个阶段,我想,而不是重新写路径,拦截或覆盖在全球范围内的Request.QueryString对象,并使用我的解密方法,只要有这个呼叫[关键]放置,并再次,不必停止使用的Request.QueryString。 然而,在网络上搜索了几个小时之后,我无法找到如何做到这一点只举一个例子?

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

Answer 1:

我想做到这一点最简单的方法是使用扩展方法。 也许是这样的:

    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";
    }
}

请注意,上面的程序类,仅供参考......在现实中你会打电话请求。{} ExtensionMethod一个asp.net web表单页面或MVC控制器的体已经提供了通过直接访问HttpRequest对象中请求属性。

这里是关于扩展的一些信息:

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



文章来源: override Request.QueryString