【问题标题】:Using Validation Properties in ASP.NET Web Services with NHibernate在带有 NHibernate 的 ASP.NET Web 服务中使用验证属性
【发布时间】:2015-02-10 05:57:41
【问题描述】:

我只是在想是否有任何快速而好的方法来验证我的模型中的属性。我知道有像 RegEx 这样的东西,但有没有更简单的选择?

例如:

我的用户模型:

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 属性)

using System;

namespace Models
{
    public class EntityBase
    {
        public virtual Guid Id { get; set; }
    }
}

在我的情况下,我应该如何对 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;
        }
}

所以如果我希望用户名至少包含 3 个字符并且只有字母数字符号(没有!%&),我该怎么做?

【问题讨论】:

    标签: c# asp.net .net regex nhibernate


    【解决方案1】:

    我们正在使用System.ComponentModel.DataAnnotations(.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));
                }
            }
        }
    }
    

    旁注:我们正在验证模型,而不是实体。

    您被正则表达式卡住以进行字母数字检查,但您可以编写自定义属性。

    【讨论】:

      猜你喜欢
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      相关资源
      最近更新 更多