【问题标题】:Is MVC2 ASP.Net URLDecoding automatically?MVC2 ASP.Net URLDecoding 是自动的吗?
【发布时间】:2023-03-15 16:43:01
【问题描述】:

所以我像这样在 MVC2 中调用控制器,并且我可以很好地访问经典查询字符串。请注意,第二个参数 thing2 已经是 URLEncoded 并且再次检索 URLEncoded 查询字符串和 URLDecoding 是没有问题的。我的例子看起来像这样......

http://mydomain.com/controller?thing1=1544&thing2=somethingURLEncoded

现在我尝试转向 MVC2 ASP.Net 处理参数的方式,并让自己成为一个不错的自定义 MapRoute。我对其进行了测试以查看它是否可以通过简单的测试...

http://mydomain.com/controller/Index/1544/999

我在控制器内部的 Index 方法中使用 VS2010 步骤调试成功!

然后我决定采取下一步并将 URL 上的最后一个参数更改为 URLEncoded 值...

http://mydomain.com/controller/Index/1544/somethingURLEncoded

我在浏览器中执行此操作后看到的问题是,在我进入控制器内的 Index 方法之前,它几乎看起来像 MVC2 ASP.Net 自动 URLDecoding。

什么给了?我想我可以先进入我的控制器,然后再做一个我自己的 URLDecode。因为原始数据是 AES 加密的并且其中有正斜杠..,所以我的参数过早地 URLDecoding 不是我可以计划的副作用。

请帮忙。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-2


    【解决方案1】:

    是的,MVC 会自动对操作参数进行 url 解码。但是您仍然可以通过查询字符串访问 url 编码的版本。

    【讨论】:

    • 是否有办法改变 URLDecode 发生的时间,以便它是在我的控制器中调用我的操作方法之前发生的最后一件事?
    • 我不这么认为,但是当 url 编码的版本仍然可以访问时,你为什么要关心呢?
    • 如果您有编码和解码方法,那么您可以在该方法中更改它们的值。就像您的编码网址中有一些保留值一样,您必须用未保留的字符替换这些字符。
    • "但是您仍然可以通过查询字符串访问url编码的版本。"。一个代码示例真的很有帮助。
    【解决方案2】:

    所以我所做的是在我的操作参数中对我的 AES 加密数据进行 Base64 编码而不是 URLEncode。

    【讨论】:

    • 我在使用 Rijndael 构建“安全”查询字符串时遇到了同样的问题。 MVC 似乎将参数解密为确定路由的一部分。
    • Base64 编码错误如果您的编码网址具有一些保留值,例如:-";" | "/" | “?” | “:” | "@" | "&" | “=” | "+" | "$" | ","
    【解决方案3】:

    由于 ASP.NET MVC 基于 ASP.NET 引擎(不足为奇),正确编码的 URL 会自动由引擎正确解码,因此您无需提问。简单地说:

    public ActionResult Index(string q)
    {
        // TODO : Use the q parameter here as is without ever caring of URL decoding it.
        // It's the caller of this action responsibility to properly URL encode his data
        return View();
    }
    

    【讨论】:

    • 在我点击控制器中的 Index 方法之前,我得到了一个 404.11 显示我的 AES 加密参数数据。 AES 加密数据中包含正斜杠。在我看来,MVC2 中的路由引擎获取的是 AES 加密数据而不是 URLEncoded 数据,因为它也无法访问我的控制器中的目标 Index 方法。
    • 为什么需要AES编码?你在说什么斜线?您确定客户端的 URL 编码正确吗?为什么使用 GET 而不是 POST 这样的事情?顺便说一句,斜线会破坏路线中的所有内容,因此请避免使用它们。
    • 是的,它必须是 AES 加密的。 AES 使用正斜杠作为加密后的可能结果。是的,我很肯定它是 URLEncoded,因为如果我再次使用查询字符串而不是参数路由,我可以 URLDecode 并且它工作得很好,正如我在最初的问题中所说的那样。这些 URL 来自超链接。这就是为什么它是 GET 而不是 POST。
    • 有没有办法停止 MVC2 ASP.Net 的自动 URL 解码,或者至少在它执行此步骤时参与其中并停止它,然后在我到达我的控制器后要求它执行它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 2011-03-19
    相关资源
    最近更新 更多