C# 将ASP.NET Web服务中的验证属性与NHibernate一起使用
我只是在想,是否有什么快速而好的方法来验证我模型中的属性。我知道有像RegEx这样的东西,但有没有更简单的选择 例如: 我的用户模型:C# 将ASP.NET Web服务中的验证属性与NHibernate一起使用,c#,asp.net,.net,regex,nhibernate,C#,Asp.net,.net,Regex,Nhibernate,我只是在想,是否有什么快速而好的方法来验证我模型中的属性。我知道有像RegEx这样的东西,但有没有更简单的选择 例如: 我的用户模型: namespace Models { public class Users : EntityBase { public virtual string Username { get; set; } public virtual string Password { get; set; } public
namespace Models
{
public class Users : EntityBase
{
public virtual string Username { get; set; }
public virtual string Password { get; set; }
public virtual Role Role { get; set; }
}
}
EntityBase:(在所有模型中继承的一个guid属性)
在我的情况下,如何对WebService.cs文件执行验证
public class LambdAlarmWebService : WebService
{
[WebMethod(EnableSession = true)]
public HttpStatusCode Login(string username, string password)
{
var factory = SessionFactory.Instance;
var session = factory.OpenSession();
var result = session.QueryOver<Users>().List<Users>();
var user = result.FirstOrDefault(u => u.Username.ToUpper() == username.ToUpper());
if (user != null && (username.ToUpper() == user.Username.ToUpper() && password == user.Password))
{
Session["Role"] = user.Role.Name;
Session["UserId"] = user.Id;
return HttpStatusCode.Accepted;
}
return HttpStatusCode.NotFound;
}
}
公共类LambdAlarmWebService:WebService
{
[WebMethod(EnableSession=true)]
公共HttpStatusCode登录(字符串用户名、字符串密码)
{
var factory=SessionFactory.Instance;
var session=factory.OpenSession();
var result=session.QueryOver().List();
var user=result.FirstOrDefault(u=>u.Username.ToUpper()==Username.ToUpper());
if(user!=null&&(username.ToUpper()==user.username.ToUpper()&&password==user.password))
{
会话[“角色”]=user.Role.Name;
会话[“UserId”]=user.Id;
返回HttpStatusCode。已接受;
}
返回HttpStatusCode.NotFound;
}
}
因此,如果我希望用户名至少包含3个字符,并且只包含字母数字符号(no!%&),我应该怎么做呢?我们正在使用(部分.NET)。它在MVC中广泛使用,但它是独立的程序集(=没有MVC依赖项)
对于您的用户名,您可以使用
namespace Models
{
using System;
using System.ComponentModel.DataAnnotations;
public class EntityBase
{
public virtual Guid Id { get; set; }
}
public class Users : EntityBase
{
[Required]
[MinLength(3)]
[RegularExpression(@"^[a-zA-Z0-9]*$")]
public virtual string Username { get; set; }
// rest of entity
}
[TestFixture]
public class ValidationTest
{
[Test]
public void Username_MustBeAlphanumeric()
{
var user = new Users()
{
Id = Guid.NewGuid(),
Username = "R_",
Password = "secret"
};
// Althernative throws exception:
// Validator.ValidateObject(user, new ValidationContext(user), true);
var errors = new List<ValidationResult>();
var ok = Validator.TryValidateObject(user, new ValidationContext(user), errors, true);
Console.WriteLine("OK: {0}", ok);
foreach (var error in errors)
{
Console.WriteLine("Error '{0}' for members {1}", error.ErrorMessage, string.Join(", ", error.MemberNames));
}
}
}
}
命名空间模型
{
使用制度;
使用System.ComponentModel.DataAnnotations;
公共类实体库
{
公共虚拟Guid Id{get;set;}
}
公共类用户:EntityBase
{
[必需]
[第(3)款]
[正则表达式(@“^[a-zA-Z0-9]*$”)
公共虚拟字符串用户名{get;set;}
//实体的其余部分
}
[测试夹具]
公共类验证测试
{
[测试]
public void Username_MustBeAlphanumeric()
{
var user=新用户()
{
Id=Guid.NewGuid(),
Username=“R_”,
Password=“secret”
};
//Althernative引发异常:
//Validator.ValidateObject(用户,新的ValidationContext(用户),true);
var errors=新列表();
var ok=Validator.TryValidateObject(用户,新的ValidationContext(用户),错误,true);
WriteLine(“OK:{0}”,OK);
foreach(错误中的var错误)
{
WriteLine({1}成员的错误'{0}',Error.ErrorMessage,string.Join(“,”,Error.MemberNames));
}
}
}
}
旁注:我们正在验证模型,而不是实体
您只能使用正则表达式进行字母数字检查,但您可以编写自定义属性
namespace Models
{
using System;
using System.ComponentModel.DataAnnotations;
public class EntityBase
{
public virtual Guid Id { get; set; }
}
public class Users : EntityBase
{
[Required]
[MinLength(3)]
[RegularExpression(@"^[a-zA-Z0-9]*$")]
public virtual string Username { get; set; }
// rest of entity
}
[TestFixture]
public class ValidationTest
{
[Test]
public void Username_MustBeAlphanumeric()
{
var user = new Users()
{
Id = Guid.NewGuid(),
Username = "R_",
Password = "secret"
};
// Althernative throws exception:
// Validator.ValidateObject(user, new ValidationContext(user), true);
var errors = new List<ValidationResult>();
var ok = Validator.TryValidateObject(user, new ValidationContext(user), errors, true);
Console.WriteLine("OK: {0}", ok);
foreach (var error in errors)
{
Console.WriteLine("Error '{0}' for members {1}", error.ErrorMessage, string.Join(", ", error.MemberNames));
}
}
}
}