URL 中的 URL 编码斜杠
尝试访问包含编码斜杠 (/) 的 URL,例如 http:// localhost:5000/Home/About/100/200,默认路由配置可能无法匹配路线。
一个潜在的解决方案是在 URL 模板中包含一个包罗万象的参数,如下所示:
routes.MapRoute( "Default", // Route name "{controller}/{action}/{*id}", // URL with parameters new { controller = "Home", action = "Index", id = "" }); // Parameter defaults
此调整允许在 URL 模板中捕获任何一系列路径段。 id 参数,包括斜杠。但是,这种方法可能并不适合所有场景。
另一种选择,特别是如果编码的斜线是单个参数的一部分,是实现自定义编码和解码逻辑。这可以通过如下提供的自定义类来完成:
public class UrlEncoder { public string URLDecode(string decode) { if (decode == null) return null; if (decode.StartsWith("=")) { return FromBase64(decode.TrimStart('=')); } else { return HttpUtility.UrlDecode( decode) ; } } public string UrlEncode(string encode) { if (encode == null) return null; string encoded = HttpUtility.PathEncode(encode); if (encoded.Replace("%20", "") == encode.Replace(" ", "")) { return encoded; } else { return "=" + ToBase64(encode); } } public string ToBase64(string encode) { Byte[] btByteArray = null; UTF8Encoding encoding = new UTF8Encoding(); btByteArray = encoding.GetBytes(encode); string sResult = System.Convert.ToBase64String(btByteArray, 0, btByteArray.Length); sResult = sResult.Replace("+", "-").Replace("/", "_"); return sResult; } public string FromBase64(string decode) { decode = decode.Replace("-", "+").Replace("_", "/"); UTF8Encoding encoding = new UTF8Encoding(); return encoding.GetString(Convert.FromBase64String(decode)); } }
此类允许您以自定义方式对字符串进行编码和解码,确保正确处理斜杠等特殊字符,同时保持可读性和可用性。
以上是如何处理 ASP.NET 路由中 URL 编码的斜杠?的详细内容。更多信息请关注PHP中文网其他相关文章!