我如何在C#中验证localhost的URL

时间:2015-04-13 06:39:01

标签: c# asp.net-mvc

我在MVC中使用UrlAttribute

但它不接受localhost网址,例如http://localhost/GCWeb

[Url(ErrorMessage = "please_enter_valid_ftp_url", ErrorMessage = null)] 
public string Url { get; set; }

这会验证网址,但不会验证localhost网址。

我该怎么做?

4 个答案:

答案 0 :(得分:4)

我还建议创建一个自定义验证器属性类。但是我想使用System.Uri类来验证而不是自定义的个人正则表达式。

iex(1)> Code.ensure_loaded?(MyApp.Repo)
true

iex(2)> Code.ensure_loaded?(MyAppppppppp.Reeeeppo)
false

通过使用System.Uri类,我们可以为自己的正则表达式留下错误的可能性。

答案 1 :(得分:0)

您可以使用127.0.0.1: portNumber 。也许这有帮助。

答案 2 :(得分:0)

关于URLAttribute code,您有3个选项:

  1. 使用IP地址代替localhost
  2. 在主机文件中使用有效网址和插入条目
  3. 创建新的URLAttribute扩展并忽略那里的Localhost

答案 3 :(得分:0)

如果我说得对,你可以使用自定义ValidationAttribute。在Models名称空间

中添加此类
public class UrlValidator : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (value != null)
        {
            var x = value.ToString();
            if (Regex.IsMatch(x, @"^http:\/\/\w+(\.\w+)*(:[0-9]+)?\/?(\/[.\w]*)*$", RegexOptions.IgnoreCase))
            {
                return ValidationResult.Success;
            }
            else
            {
                return new ValidationResult(ErrorMessage);
            }
        }
        else
        {
            return new ValidationResult("Please enter some value");
        }
    }
}

并像

一样使用它
[UrlValidator(ErrorMessage = "please_enter_valid_ftp_url")] 
public string Url { get; set; }

当然,您可以修改正则表达式以满足您的要求。我在这个特定示例中使用的那个对于像

这样的地址是有效的
http://example
http://example.com
http://127.0.0.1