2017-07-25 158 views
0

我有一个MVC web应用程序。特定区域的URL进来为:如何修改或处理MVC中的URL特殊字符?

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

这会导致一个“的资源不能被发现。”错误。但是,如果我改变的URL

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

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

+0

该URL没有正确编码。 – Amy

+1

URL的来源是应该放置修补程序的位置,而不是在您的应用程序中。它看起来像我的双重编码。 – JuanR

+0

这是因为您的网址包含不安全的字符。您可以在这里阅读更多信息:https://www.raymond.cc/blog/decoding-percent-with-numbers-encoding-in-urls/ –

回答

2

你会想用这个你的网址:

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

希望对你有用了!

+2

谢谢,Capn杰克。下一个Capn Morgan在我身上。 – wandercoder

+0

阿哈没问题:) –

3

第一个URL的编码错误。如果你看一下RFC 3986你会在2.4发现该段

当URI被废弃时,组件和子组件
显著的具体方案,非关联化过程(如果有的话)
必须被分析之前分离这些组件内的百分比编码的八位位组可以被安全地解码,否则数据可能被错误地作为组件分隔符的

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

你不应该修复它在服务器端;您将不得不更改生成错误网址http://localhost/General/Bpa%3fapplication%3dTrf%23/GeneralInputs的地方。