URL を表す文字列が相対であることを検証しようとしていますがUri.TryCreate()
、プロトコルのない URL を相対として受け入れるようです (例: www.domain.com/something/else.aspx)。しかし、必要なのは /something/else.aspx/ だけです
たとえば、このテスト文字列は、uri.PathAndQuery
9 行目に到達しようとすると常に例外をスローします。ただし、TryCreate()
true を返します。
string test = "/something/else.aspx";
bool isValid;
var url = getPathAndQuery(test, out isValid);
private string getPathAndQuery(string url, out bool isValid) {
Uri uri;
isValid = Uri.TryCreate(url, UriKind.Relative, out uri);
try {
return isValid ? uri.PathAndQuery : string.Empty;
} catch (Exception e) {
isValid = false;
return string.Empty;
}
}
入力/出力の例:
入力: /something/else.aspx ==> 出力: /something/else.aspx
入力: www.domain.com/something/else.aspx ==> 出力: /something/else.aspx
入力: http://www.domain.com/something/else.aspx ==> 出力: string.Empty
URLの相対パスが与えられた場合、それが実際に相対であることを検証し、ユーザーがドメインも通過した場合にパスとクエリを取得するにはどうすればよいですか?