简体   繁体   English

使用NHibernate在ASP.NET Web服务中使用验证属性

[英]Using Validation Properties in ASP.NET Web Services with NHibernate

I was just thinking if there are any fast and good way to validate the propertys in my model. 我只是在考虑是否有任何快速有效的方法来验证模型中的属性。 I know there are stuff like RegEx out there, but are there any easier option? 我知道那里有RegEx之类的东西,但是有没有更简单的选择?

For example: 例如:

My User Model: 我的用户模型:

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: (One guid property which is inherited in all models) EntityBase :(在所有模型中都继承的一个guid属性)

using System;

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

How shall I in my case perform the validation on the WebService.cs file? 我该如何在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;
        }
}

So if I want UserName to be minimum of 3 characters and only alphanumeric signs (no !%&), how shall I do it? 因此,如果我希望UserName至少包含3个字符,并且只能包含字母数字符号(不能使用!%&),该怎么办?

We are using System.ComponentModel.DataAnnotations (part of .NET). 我们正在使用System.ComponentModel.DataAnnotations (.NET的一部分)。 It is used extensively in MVC, but it is independent assembly (=no MVC dependency). 它在MVC中广泛使用,但它是独立的程序集(=不依赖MVC)。

For your username, you would use 对于您的用户名,您将使用

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));
            }
        }
    }
}

Side note: we are validating on models, not entities. 旁注:我们正在验证模型,而不是实体。

You are stuck with regex for alphanumeric check, but you can write custom attribute. 您因使用正则表达式而无法进行字母数字检查,但可以编写自定义属性。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM