asp.net mvc dataannotation проверяющий URL - PullRequest
13 голосов
/ 17 июня 2010

Может кто-нибудь сказать мне, как я могу проверить URL-адрес, как http://www.abc.com

Ответы [ 9 ]

36 голосов
/ 17 февраля 2011

Пусть System.Uri сделает тяжелую работу за вас вместо RegEx:

public class UrlAttribute : ValidationAttribute
{
    public UrlAttribute()
    {
    }

    public override bool IsValid(object value)
    {
        var text = value as string;
        Uri uri;

        return (!string.IsNullOrWhiteSpace(text) && Uri.TryCreate(text, UriKind.Absolute, out uri ));
    }
}
16 голосов
/ 09 октября 2015

Теперь (по крайней мере, из ASP.NET MVC 5) вы можете использовать UrlAttribute, включая проверку сервера и клиента:

[Url]
public string WebSiteUrl { get; set; }
11 голосов
/ 13 апреля 2012

Если вы используете MVC3 RTM, вы можете просто использовать атрибут проверки [URL].

См. http://weblogs.asp.net/imranbaloch/archive/2011/02/05/new-validation-attributes-in-asp-net-mvc-3-future.aspx

7 голосов
/ 17 июня 2010

Если в соответствии с заголовком вашего сообщения вы хотите использовать MVC DataAnnotations для проверки строки URL, вы можете написать собственный валидатор:

public class UrlAttribute : ValidationAttribute
{
    public UrlAttribute() { }

    public override bool IsValid(object value)
    {
        //may want more here for https, etc
        Regex regex = new Regex(@"(http://)?(www\.)?\w+\.(com|net|edu|org)");

        if (value == null) return false;

        if (!regex.IsMatch(value.ToString())) return false;

        return true;
    }
}

У Phil Haack есть хорошее руководство, которое выходит за рамки этого и включает в себя добавление кода для проверки на стороне клиента с помощью jQuery: http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

2 голосов
/ 03 августа 2018

Как насчет использования атрибута URL , например:

public class ProveedorMetadata
{
    [Url()]
    [Display(Name = "Web Site")]
    public string SitioWeb { get; set; }
}
0 голосов
/ 29 сентября 2016

Uri.IsWellFormedUriString проверяет правильность формата URL-адреса и не требует экранирования.

/// <summary>
/// Ensures the property is a valid URL.
/// </summary>
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)]
public class ValidateUrlAttribute :  ValidationAttribute
{
    public ValidateUrlAttribute()
    {
    }

    public override bool IsValid(object value)
    {
        // Do not validate missing URLs - people can use [Required] for that.
        string text = (value as string) ?? "";

        if (text == "")
            return true;

        return Uri.IsWellFormedUriString(text, UriKind.Absolute);
    }
}
0 голосов
/ 21 июня 2014

Вот правильный код атрибута проверки, используемый в системе prod:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class UriValidation : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        if (value == null || value.ToString() == string.Empty)
        {
            return true;
        }

        try
        {
            Uri result;
            if (Uri.TryCreate(value.ToString(), UriKind.RelativeOrAbsolute, out result))
            {
                if (result.Scheme.StartsWith("http") || result.Scheme.StartsWith("https"))
                {
                    return true;
                }
            }
        }
        catch
        {
            return false;
        }

        return false;
    }
}
0 голосов
/ 18 июня 2014

Я использую это регулярное выражение для внутренних или внешних URL-адресов на моем сайте.

((?:https?\:\/\/|\/.)(?:[-a-z0-9]+\.)*[-a-z0-9]+.*)
0 голосов
/ 17 июня 2010

Используйте аннотацию данных регулярного выражения и используйте регулярное выражение, например:

http://www\.\w+\.(com|net|edu|org)

В зависимости от того, что вам нужно проверить; Вы требуете http: или вы требуете www.? Так что это может изменить регулярное выражение, если необязательно, на:

(http://)?(www\.)?\w+\.(com|net|edu|org)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...