Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET捕获所有路由和转义正斜杠_Asp.net Mvc_Asp.net Mvc Routing - Fatal编程技术网

Asp.net mvc ASP.NET捕获所有路由和转义正斜杠

Asp.net mvc ASP.NET捕获所有路由和转义正斜杠,asp.net-mvc,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc Routing,我在MVC中使用catch-all路由来提供应用程序中资源的路径。看起来是这样的: _routes.MapRoute(null, "Resource/{*resourcePath}", new { controller = "Resource", action = "Open" }); 这个动作就像 public ActionResult Open(string resourcePath) { string[] path = resourcePath.Split(

我在MVC中使用catch-all路由来提供应用程序中资源的路径。看起来是这样的:

_routes.MapRoute(null, "Resource/{*resourcePath}", new { 
    controller = "Resource", 
    action = "Open" 
});
这个动作就像

public ActionResult Open(string resourcePath) {
    string[] path = resourcePath.Split('/');
}
用一个友好的URL点击它,效果很好

/Resource/Path/To/Resource  
    path = ["Path", "To", "Resource"]
但是当我有一个带有正斜杠的资源名时(当然,我是转义的),它会将转义的斜杠视为路径的一部分

/Resource/Path/To/Resource%2FWith%2FSlashes  
    path = ["Path", "To", "Resource", "With", "Slashes"]
    I expected ["Path", "To", "Resource/With/Slashes"]
我尝试了双重越狱,结果ASP.NET因为安全原因抱怨双重越狱,我认为我不应该打开那罐蠕虫


有什么方法可以使“全部捕获”路线不取消斜线的缩放吗?

我想您必须对不属于路径一部分的正斜线使用另一种编码。例如,使用双向前斜杠,然后连接由空元素分隔的拆分结果部分。不过,只是一些随机想法……我认为IIS是其中之一,通过加倍来解码URL看起来也不起作用,带有/Path/To/Resource//with//double//Slashes的URL在请求到达ASP.NET时会被更改为/Path/To/Resource/with/double/Slashes,但我认为这个想法会适用于其他字符