Как я могу проверить, что электронная почта от определенного домена в ASP.NET MVC? - PullRequest
1 голос
/ 16 января 2012

Я создаю приложение, которое будет первоначально развернуто в определенных университетских городках.

Я хотел бы убедиться, что, когда пользователь регистрируется и сообщает свой адрес электронной почты, это электронная почта, предоставленная его школой, чтобы гарантировать, что только законные учащиеся имеют доступ к услуге.

У кого-нибудь есть пример или идеи, как этого добиться?возможно с пользовательским атрибутом проверки?

ПРИМЕЧАНИЕ: В частности, мне просто нужно убедиться, что вводимое ими электронное письмо является адресом электронной почты .edu

Похоже, регулярное выражение - это путь ...Кто-нибудь может дать какое-нибудь руководство по правильному выражению?

Ответы [ 7 ]

3 голосов
/ 16 января 2012

Я бы создал атрибут регулярного выражения и пользовательскую аннотацию данных. Зарегистрируйте аннотацию под Application_Start в своей глобальной сети. Затем вы можете использовать проверку в качестве DataAnnotation в вашей модели как на стороне клиента, так и на стороне сервера. У меня есть класс RegularExpressAttributes.cs, который содержит все мои часто используемые регулярные выражения; все, что я делаю, это бросаю это в мои проекты. Если люди хотят, просто дайте мне знать.

Вид:

<div class="editor-field span-7">
    @Html.LabelFor(model => model.EmailAddress)
    @Html.EditorFor(model => model.EmailAddress)
    @Html.ValidationMessageFor(model => model.EmailAddress)
</div>

атрибут регулярного выражения

using System;
using System.Collections.Generic;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;

namespace ProjectsMVC.Helpers
{
    #region RegularExpressionAttributes
    /// <summary>
    /// Email validation regular expression attribute
    /// </summary>
    /// <remarks>Validates person@someplace.com, some.person@someplace.com, some_person@some+place.com and combinations thereof.</remarks>
    public class ValidateEmailAttribute : RegularExpressionAttribute
    {
        // public ValidateEmailAttribute()
        //     : base(@"^\S?([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$") { }

        public ValidateEmailAttribute()
            : base(@)@"^\S?([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@someplace.com$") {}
    }   

    #region DataAnnotationsModelValidator
    public class EmailValidator : DataAnnotationsModelValidator<ValidateEmailAttribute>
    {
        #region Properties
        /// <summary>
        /// Error message
        /// </summary>
        private readonly string _errorMessage;

        /// <summary>
        /// Regular expression pattern
        /// </summary>
        private readonly string _pattern;
        #endregion

        #region Constructors
        /// <summary>
        /// Initializes a new instance of the <see cref="EmailValidator"/> class.
        /// </summary>
        /// <param name="metaData">The meta data.</param>
        /// <param name="context">The context.</param>
        /// <param name="attribute">The attribute.</param>
        public EmailValidator(ModelMetadata metaData, ControllerContext context, ValidateEmailAttribute attribute)
            : base(metaData, context, attribute)
        {
            this._errorMessage = attribute.ErrorMessage;
            this._pattern = attribute.Pattern;
        }

        #endregion

        #region Methods
        /// <summary>
        /// Retrieves a collection of client validation rules.
        /// </summary>
        /// <returns>A collection of client validation rules.</returns>
        public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
        {
            var rule = new ModelClientValidationRegexRule(this._errorMessage, this._pattern);
            return new[] { rule };
        }

        #endregion
    }
}

Global.ascx.cs

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);

    // Register custom model validators
    DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(ValidateEmailAttribute), typeof(EmailValidator));
}

Наконец модель, User.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using ProjectsMVC.Helpers;

namespace ProjectsMVC.Models
{
    [MetadataType(typeof(User_Validation))]
    public partial class User
    {
        public string ProperName
        {
            get
            {
                return string.Format("{0} {1}", this.FirstName, this.LastName);
            }
        }

        public string DirectoryName
        {
            get
            {
                return string.Format("{0}, {1}", this.LastName, this.FirstName);
            }
        }

        public string IsUserActive
        {
            get
            {
                return Dictionaries.TrueOrFalse.First(t => t.Key == this.IsActive).Value.ToString();
            }
        }
    }

    public class User_Validation
    {
        [Display(Name = "eName")]
        [Required(ErrorMessage = "required")]
        [ValidateEname(ErrorMessage = "invalid")]
        public string UserName { get; set; }

        [Display(Name = "First DirectoryName")]
        [Required(ErrorMessage = "required")]
        public string FirstName { get; set; }

        [Display(Name = "Last DirectoryName")]
        [Required(ErrorMessage = "required")]
        public string LastName { get; set; }

        [Display(Name = "Email Address")]
        [Required(ErrorMessage = "required")]
        [ValidateEmail(ErrorMessage = "invalid")]
        public string EmailAddress { get; set; }

        [Display(Name = "Active User")]
        [Required(ErrorMessage = "required")]
        public bool IsActive { get; set; }
    }
}
2 голосов
/ 16 января 2012

Используйте RegularExpressionAttribute и создайте соответствующее регулярное выражение для вашего конкретного домена.

2 голосов
/ 16 января 2012

Если вы ищете пользовательский валидатор , пожалуйста, обратитесь к этой статье , там очень хорошее объяснение для валидации модели MVC.

Вам следует использовать регулярное выражение attibute в качестве валидатора для поля электронной почты в модели.Это также объясняется в статье.

1 голос
/ 16 января 2012

В идеале у нас может быть выпадающая школа, студент должен выбрать школу и ввести адрес электронной почты.

Тогда у нас может быть отображение названия школы и формата электронной почты.

school name - ABC
email format - [\w]+[\.\-\_]?[\w]+@ABC.[edu|org]

Формат электронной почты может варьироваться в зависимости от поставщика.

Эти вещи могут быть частью web.config

<Web.config>
<appsettings>
<add key="ABC" value="[\w]+[\.\-\_]?[\w]+@ABC.[edu|org]"/>
.
.
.

Мы можем прочитать значение из конфигурации, используя ConfigurationManager.

Кроме того, ваша модель может наследовать от IValidatableObject и переопределять метод Validate для проверки адреса электронной почты, если он недействителен, отбросить ValidationRessult, который может отображаться в представлении как Ошибка проверки

1 голос
/ 16 января 2012

Имеется RemoteAttribute атрибут проверки ( RemoteAttribute Class ).В его параметрах вы можете указать действие контроллера, которое может сделать процесс проверки.

1 голос
/ 16 января 2012

Если пользователь относится к конкретному колледжу, необходимо указать специальный суффикс электронной почты.Вы можете сохранить его в таблице, а затем, когда пользователь входит в систему, чтобы проверить суффикс в соответствии с колледжем.

Если вам нужно проверить действующий адрес электронной почты, вы можете использовать регулярное выражение.

См. Пример кода C # для проверки действующей электронной почты.

  Regex re = new Regex(@"\w.\w@{1,1}\w[.\w]?.\w");
            return re.IsMatch(email);
1 голос
/ 16 января 2012

Пользовательский атрибут проверки, вы сказали?Вот руководство: http://msdn.microsoft.com/en-us/gg618485

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...