我想删除 URL 中的多个斜杠,这样如果有人搜索:
site.com///Home///Index// 永久重定向到 site.com/Home/Index/ 或至少给出 404。
我尝试从 IIS 创建一些重写规则甚至阻止规则: ,过了一会儿我发现问题出在请求接触 IIS 之前,因为在 IIS 中,URL 没有多个斜杠。
我还尝试创建一个新项目,并且使用 IIS Express 我遇到了同样的问题,如果我使用如下请求检查进入我的应用程序的 url:http://localhost:55158///Home///Index ,我进入我的应用程序:/Home/Index ,但如果我签入 Fiddler,请求是:
我该怎么做才能删除不必要的斜杠?
我的怀疑是,因为它是 URL 分层部分的一部分,所以它会自动将双斜杠转换为单斜杠,因为 URL 的该部分不允许使用双斜杠。由于 URL 包含 URL 的分层部分中不允许的字符,因此最好将其指定(适当编码)作为查询字符串(如果是 GET 请求)或表单参数(对于 POST)的一部分。
http://localhost:37779/api/get/?url=http:%2F%2Fwww.mysite.com
据我所知,无论您在地址栏中输入多少个“/”,Web浏览器和fiddler都只会向IIS端发送单个“/”。所以不需要使用重写规则来删除“/”。
我认为问题出在 ASP.NET MVC 中的 RouteConfig 中。
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);