如何修改或处理 MVC 中的 URL 特殊字符?



我有一个MVC Web应用程序。特定区域的 URL 显示为:

http://localhost/General/Bpa%3fapplication%3dTrf%23/GeneralInputs

这会导致"找不到资源"错误。 但是,如果我将 URL 更改为

http://localhost/General/Bpa?application=Trf#/GeneralInputs

然后一切正常。我可以通过使用一些路由调试技巧看到,第一种情况下的控制器是:"Bpa?application=Trf#",而第二种情况是:"Bpa",这是正确的。我如何解释这一点或替换编码字符?

第一个 URL 的编码错误。如果您查看 RFC 3986,您会在 2.4 中找到该段落

取消引用 URI 时,组件和子组件
对特定于方案的取消引用过程(如果有(
必须在百分比编码的八位字节之前解析和分离 这些组件可以安全地解码,否则数据可能会被
误认为是组件分隔符。

这意味着 URL 由未编码的字符分解(在本例中为 ? 很重要(。如果使用编码字符串 #3f,那么框架将不得不寻找一个名为"Bpa?application=Trf#"而不是"Bpa"的控制器。因此,返回 404/未找到资源。

你不应该在服务器端修复它;你必须改变生成错误 urlhttp://localhost/General/Bpa%3fapplication%3dTrf%23/GeneralInputs的位置。

你会想在你的网址上使用它:

string fixedUrl = System.Uri.UnescapeDataString(yourUrlHere); 

希望这对你有用!

最新更新