Asp.net mvc ASP.NET捕获所有路由和转义正斜杠
我在MVC中使用catch-all路由来提供应用程序中资源的路径。看起来是这样的: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(
_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,但我认为这个想法会适用于其他字符