validation - 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>
解决方案
在 .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; }
推荐阅读
- angular - Angular 8 在 npm run start-dev 上运行 dist 文件夹
- python - Apache 总是在没有日志或终端反馈的情况下抛出 500 内部服务器错误
- python - cv2的libpng15的导入错误如何纠正?[解决]
- github-api - 如何通过rest api获取github用户相关问题数据?
- spring-boot - 使用 SpringBoot 的普罗米修斯
- mongodb - $sort 中的 Mongo 和索引问题
- react-native - react-native-video 不适用于 muted=true
- r - 如何根据行索引在数据帧上执行滞后/超前
- javascript - 根据数组中元素的数量反应渲染样式
- java - Android为库模块创建模板