我有一个MVC Web应用程序。特定区域的URL名称为:
http://localhost/General/Bpa%3fapplication%3dTrf%23/GeneralInputs
这导致"无法找到资源。"错误。但是,如果我将URL更改为
然后一切正常。我可以看到使用一些路由调试技巧,第一种情况下的控制器是:" Bpa?application = Trf#",而第二种是:" Bpa",这是正确。我如何解释这个或替代编码的字符?答案 0 :(得分:3)
第一个网址的编码错误。如果您查看RFC 3986,您会在2.4中找到段落
取消引用URI时,组件和子组件为 对特定计划的解除引用程序(如果有的话)具有重要意义 必须在百分比编码的八位字节之前解析和分离 这些组件可以安全地解码,否则数据可能是
被误认为是组件分隔符。
这意味着URL由未编码的字符分解(在这种情况下是“很重要”)。如果使用编码的字符串#3f,则框架必须查找名为“Bpa?application=Trf#
”而不是“Bpa
”的控制器。因此,返回未找到的404 /资源。
你不应该在服务器端修复它;您必须更改生成错误网址http://localhost/General/Bpa%3fapplication%3dTrf%23/GeneralInputs
的位置。
答案 1 :(得分:2)
您将要在您的网址上使用此功能:
string fixedUrl = System.Uri.UnescapeDataString(yourUrlHere);
希望能为你效劳!