C# URL中带有斜杠的变量,它';s URL已编码,但IIS仍能看到斜杠?

C# URL中带有斜杠的变量,它';s URL已编码,但IIS仍能看到斜杠?,c#,asp.net-mvc-routing,C#,Asp.net Mvc Routing,我有一个控制器,其方法在路由中传递了一个变量-控制器: [Route("cont/{MyParameter}")] public ActionResult Index(string MyParameter) { ... } 当我像这样在URL中传递一个值(abcdef)时,这很好: http://localhost/my-website/cont/abcdef 但是,当我传递一个带有编码斜杠的斜杠时,它会失败-就好像斜杠没有编码一样-例如: http://localhost/my-websi

我有一个控制器,其方法在路由中传递了一个变量-控制器:

[Route("cont/{MyParameter}")]
public ActionResult Index(string MyParameter)
{
...
}
当我像这样在URL中传递一个值(abcdef)时,这很好:

http://localhost/my-website/cont/abcdef
但是,当我传递一个带有编码斜杠的斜杠时,它会失败-就好像斜杠没有编码一样-例如:

http://localhost/my-website/cont/abc%2fdef
我在IIS中收到“找不到资源”-请求的URL显示在以下内容的正文中:

Requested URL
   http://localhost:80/f-website/cont/abc/def
它似乎添加了斜杠——即使它们是经过编码的

但是,地址栏中仍显示带有%2f的原始URL

如何作为参数传递/输入?我认为URL编码是这里的解决方案,但显然没有效果


我在谷歌上找不到关于这个具体问题的任何信息。

也许这篇文章可以帮助你:还有。。。基本上,它不太可能在大多数web服务器上按您所期望的方式工作,即使有其他说法。@AlexeiLevenkov很有趣,但没有解决方案。如果包含斜杠,如何在URI中可靠地传输en编码的参数(该值就是该参数)?这里有什么最佳实践吗?我的看法是:URL首先是机器可读的语法。如果您希望应用程序100%可靠,那么应该只使用字母数字和破折号。在URL路径中应该避免使用编码。另一方面,查询字符串是为下游应用程序读取而设计的,因此可以对大多数字符进行编码。也就是说,我会避开在URL中具有特殊意义的字符(请参见上面链接中的列表),因为所有服务器和防火墙都会将它们解释为要传递的原始数据。因此,首先,我会查看应用程序设计,并确定您是否真的需要使用正斜杠。如果答案仍然是肯定的,我建议使用您的应用程序可以理解的令牌替换,它遵循正常的URL规则(
/fslash interest/this page bslash is/
)。然后,您的应用程序将负责将令牌替换为
-fslash-
/
(您可能会为此使用筛选器或值提供程序)。这使得它更人性化,也更易于机器阅读。