URL 内の URL エンコードされたスラッシュ
http:// など、エンコードされたスラッシュ (/) を含む URL にアクセスしようとした場合localhost:5000/Home/About/100/200、デフォルトのルーティング設定が一致しない可能性があります。
考えられる解決策の 1 つは、以下に示すように、URL テンプレートにキャッチオール パラメータを含めることです。
routes.MapRoute( "Default", // Route name "{controller}/{action}/{*id}", // URL with parameters new { controller = "Home", action = "Index", id = "" }); // Parameter defaults
この調整により、任意の一連のパス セグメントをルート内でキャプチャできるようになります。 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 中国語 Web サイトの他の関連記事を参照してください。