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

时间:2017-07-25 20:47:20

标签: c# asp.net-mvc

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

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

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

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

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

2 个答案:

答案 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); 

希望能为你效劳!