【问题标题】:Validate that string is relative url not working验证字符串是相对 url 不起作用
【发布时间】:2014-07-24 20:52:59
【问题描述】:

我正在尝试验证表示 url 的字符串是否是相对的,但似乎Uri.TryCreate() 将接受任何没有协议的 url 作为相对的(即:www.domain.com/something/else.aspx)。但我只需要 /something/else.aspx/

例如,当尝试在第 9 行获取 uri.PathAndQuery 时,此测试字符串总是会抛出异常。即使 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 的相对路径,我如何验证它确实是相对的,并在用户也通过域的情况下获取路径和查询?

【问题讨论】:

  • 验证它是否是相对的很容易,但是仅获取可能包含域的 url 的路径和查询有点困难。我该怎么做呢?
  • 您能否提供一些示例输入和预期输出?如果路径是相对的,应该返回多少路径?

标签: c# uri url-validation


【解决方案1】:

PathAndQuery返回的路径是always an absolute path,所以对相对路径不起作用。

【讨论】:

  • 但问题是在使用PathAndQuery之前如何确保它是绝对路径。我认为IsAbsoluteUri 有帮助。
  • 永远不会是绝对的。整个目的是只允许相对 url。
  • 问题似乎是您无法从相对 url 中获取完整路径,因为只有在相对 url 与基本 url 组合后才能获取完整路径。
  • 也许正则表达式是要走的路
  • 您要检查的相对网址是什么?例如开头没有http://?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 2021-02-13
  • 2016-02-18
  • 2013-08-19
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多