验证类型格式 - 找不到验证整数的方法
Validating type formats - can't find a way to validate an integer
我正在使用 Web API 2 设置 REST API,它连接到 EF 代码优先数据库。我正在尝试验证返回的信息格式是否正确,但找不到验证方法。
我正在尝试验证 "CreditCardNumberLastFour" 不超过 4 个字符。
验证 PhoneNumber 以匹配 phone 号码的正则表达式并验证 EmailAddress 以匹配电子邮件地址的正则表达式
我尝试阅读大量有关 Web API 和 EF Code first DB 的 Microsoft 文档,其中 none 讨论了应该如何完成。
所以我一直在谷歌搜索我的问题,似乎有点边缘情况,没有涵盖。
public class User
{
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string CreditCardNumberLastFour { get; set; }
public string EmailAddress { get; set; }
public long PhoneNumber { get; set; }
public bool UserInSession { get; set; }
public Card Card { get; set; }
}
//我要实现的是什么
public class LastFour
{
//if User.CreditCardNumberLastFour.Length != 4
//{
//
//}
}
//POST FROM API /,可能认为支票可以放在这里?但不确定会在哪里发生。
//POST api/values
public void Post([FromBody]User value)
{
using (var db = new MembershipContext())
{
value = new User();
db.Users.Add(value);
db.SaveChanges();
}
}
对于 CreditCardNumberLastFour,我希望任何多于或少于 4 个字符的内容都会被拒绝,所有超过 4 个字符的内容都会被接受。
方案一:简单检查字符串值的长度
//POST api/values
public void Post([FromBody]User value)
{
// ensure only 4 characters in the string
if (value.CreditCardNumberLastFour.Length != 4)
{
return;
}
using (var db = new MembershipContext())
{
value = new User();
db.Users.Add(value);
db.SaveChanges();
}
}
或者如果你想更严格,确保值都是数字
//POST api/values
public void Post([FromBody]User value)
{
// check for numbers only
if (!Regex.IsMatch(value.CreditCardNumberLastFour, @"^\d+$")
{
return;
}
// ensure length is 4
if (value.CreditCardNumberLastFour.Length != 4)
{
return;
}
using (var db = new MembershipContext())
{
value = new User();
db.Users.Add(value);
db.SaveChanges();
}
}
选项 2:class
上的验证器
public class User
{
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string CreditCardNumberLastFour { get; set; }
public string EmailAddress { get; set; }
public long PhoneNumber { get; set; }
public bool UserInSession { get; set; }
public Card Card { get; set; }
}
interface IValidator<T> {
bool Validate(T t);
}
class UserValidator : IValidator<User> {
public bool Validate(User u) {
// check for numbers only
if (!Regex.IsMatch(value.CreditCardNumberLastFour, @"^\d+$")
{
return false;
}
// ensure length is 4
if (value.CreditCardNumberLastFour.Length != 4)
{
return false;
}
// add more checks here if needed ....
}
}
然后,在您的代码中,您可以执行以下操作
//POST api/values
public void Post([FromBody]User value)
{
var validator = new UserValidator();
if (!validator.Validate(value)){
{
return;
}
using (var db = new MembershipContext())
{
value = new User();
db.Users.Add(value);
db.SaveChanges();
}
}
您可以探索 ModelState 验证。您的代码可以修改为 -
using System.ComponentModel.DataAnnotations;
public class User
{
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[Required]
[StringLength(4)]
public string CreditCardNumberLastFour { get; set; }
[Required]
[RegularExpression("", ErrorMessage = "Invalid Email")]
public string EmailAddress { get; set; }
public long PhoneNumber { get; set; }
public bool UserInSession { get; set; }
public Card Card { get; set; }
}
和行动 -
public void Post([FromBody]User value)
{
if (ModelState.IsValid) {
}
}
您可以探索更多 - Here
我正在使用 Web API 2 设置 REST API,它连接到 EF 代码优先数据库。我正在尝试验证返回的信息格式是否正确,但找不到验证方法。
我正在尝试验证 "CreditCardNumberLastFour" 不超过 4 个字符。
验证 PhoneNumber 以匹配 phone 号码的正则表达式并验证 EmailAddress 以匹配电子邮件地址的正则表达式
我尝试阅读大量有关 Web API 和 EF Code first DB 的 Microsoft 文档,其中 none 讨论了应该如何完成。
所以我一直在谷歌搜索我的问题,似乎有点边缘情况,没有涵盖。
public class User
{
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string CreditCardNumberLastFour { get; set; }
public string EmailAddress { get; set; }
public long PhoneNumber { get; set; }
public bool UserInSession { get; set; }
public Card Card { get; set; }
}
//我要实现的是什么
public class LastFour
{
//if User.CreditCardNumberLastFour.Length != 4
//{
//
//}
}
//POST FROM API /,可能认为支票可以放在这里?但不确定会在哪里发生。
//POST api/values
public void Post([FromBody]User value)
{
using (var db = new MembershipContext())
{
value = new User();
db.Users.Add(value);
db.SaveChanges();
}
}
对于 CreditCardNumberLastFour,我希望任何多于或少于 4 个字符的内容都会被拒绝,所有超过 4 个字符的内容都会被接受。
方案一:简单检查字符串值的长度
//POST api/values
public void Post([FromBody]User value)
{
// ensure only 4 characters in the string
if (value.CreditCardNumberLastFour.Length != 4)
{
return;
}
using (var db = new MembershipContext())
{
value = new User();
db.Users.Add(value);
db.SaveChanges();
}
}
或者如果你想更严格,确保值都是数字
//POST api/values
public void Post([FromBody]User value)
{
// check for numbers only
if (!Regex.IsMatch(value.CreditCardNumberLastFour, @"^\d+$")
{
return;
}
// ensure length is 4
if (value.CreditCardNumberLastFour.Length != 4)
{
return;
}
using (var db = new MembershipContext())
{
value = new User();
db.Users.Add(value);
db.SaveChanges();
}
}
选项 2:class
上的验证器public class User
{
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string CreditCardNumberLastFour { get; set; }
public string EmailAddress { get; set; }
public long PhoneNumber { get; set; }
public bool UserInSession { get; set; }
public Card Card { get; set; }
}
interface IValidator<T> {
bool Validate(T t);
}
class UserValidator : IValidator<User> {
public bool Validate(User u) {
// check for numbers only
if (!Regex.IsMatch(value.CreditCardNumberLastFour, @"^\d+$")
{
return false;
}
// ensure length is 4
if (value.CreditCardNumberLastFour.Length != 4)
{
return false;
}
// add more checks here if needed ....
}
}
然后,在您的代码中,您可以执行以下操作
//POST api/values
public void Post([FromBody]User value)
{
var validator = new UserValidator();
if (!validator.Validate(value)){
{
return;
}
using (var db = new MembershipContext())
{
value = new User();
db.Users.Add(value);
db.SaveChanges();
}
}
您可以探索 ModelState 验证。您的代码可以修改为 -
using System.ComponentModel.DataAnnotations;
public class User
{
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[Required]
[StringLength(4)]
public string CreditCardNumberLastFour { get; set; }
[Required]
[RegularExpression("", ErrorMessage = "Invalid Email")]
public string EmailAddress { get; set; }
public long PhoneNumber { get; set; }
public bool UserInSession { get; set; }
public Card Card { get; set; }
}
和行动 -
public void Post([FromBody]User value)
{
if (ModelState.IsValid) {
}
}
您可以探索更多 - Here