1

URL を表す文字列が相対であることを検証しようとしていますがUri.TryCreate()、プロトコルのない URL を相対として受け入れるようです (例: www.domain.com/something/else.aspx)。しかし、必要なのは /something/else.aspx/ だけです

たとえば、このテスト文字列は、uri.PathAndQuery9 行目に到達しようとすると常に例外をスローします。ただし、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の相対パスが与えられた場合、それが実際に相対であることを検証し、ユーザーがドメインも通過した場合にパスとクエリを取得するにはどうすればよいですか?

4

1 に答える 1

0

によって返されるパスPathAndQuery常に絶対パスであるため、相対パスでは機能しません。

于 2014-07-24T20:55:56.490 に答える