首页 > 解决方案 > ASP.NET Core 2.2 Razor 页面 - IP 地址的用户输入验证

问题描述

我正在努力寻找一个示例或解决方案来验证用户在 Razor Page 表单控件上的 IP 地址输入。

输入的 IP 地址可以是任何值,但我只想检查/验证输入的格式是否正确,即通常检查太多数字、超过 0.254 的八位字节范围不正确等。

我假设会有一个内置的验证属性,我可以将其添加到模型类中,但不确定这是否需要添加 NuGet。

如果我错了,请纠正我,但会假设验证此服务器端可能是这里更好的解决方案,并从长远来看减少代码。但鉴于这更多地只是为了确保正确的用户输入而不是作为安全功能,那么我很乐意探索所有途径,在此先感谢......

型号类:

 [Required]
 [Display(Name = "IP Address")]
 public string IpAddress { get; set; }

剃刀页面:

 <div class="form-group">
            <label asp-for="ConnectorModel.IpAddress" class="control-label"></label>
            <input asp-for="ConnectorModel.IpAddress" class="form-control" />
            <span asp-validation-for="ConnectorModel.IpAddress" class="text-danger"></span>
        </div>

标签: validationasp.net-corerazor-pages

解决方案


在 .NET Core 中,您可以简单地创建一个继承自 ValidationAttribute 的类。您可以在此文档中查看完整的详细信息。

根据您的要求,您可以创建如下属性:

public class IPAddressAttribute : ValidationAttribute
{

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        YourViewModel yourviewmodel = (YourViewModel)validationContext.ObjectInstance;

        const string regexPattern = @"^([\d]{1,3}\.){3}[\d]{1,3}$";
        var regex = new Regex(regexPattern);
        if (string.IsNullOrEmpty(yourviewmodel.IpAddress))
        {
            return new ValidationResult("IP address  is null");
        }
        if (!regex.IsMatch(yourviewmodel.IpAddress )|| yourviewmodel.IpAddress.Split('.').SingleOrDefault(s => int.Parse(s) > 255)!=null)
        return new ValidationResult("Invalid IP Address");


        return ValidationResult.Success;
    }
}

在您的视图模型中使用如下:

[IPAddressAttribute]
[Display(Name = "IP Address")]
public string IpAddress { get; set; }

推荐阅读