Я не знаю, можно ли использовать DataTypeAttributes
в качестве параметров в функции.Но как простой способ просто проверить, является ли это действительной нотацией электронной почты, вы можете использовать этот код:
try {
var addr = new System.Net.Mail.MailAddress(email);
return addr.Address == email;
}
catch {
return false;
}
РЕДАКТИРОВАТЬ 1:
Как уже упоминалосьот Mark Vincze здесь в своем блоге, вы можете создать новый ActionFilterAttribute
, подобный этому, когда вы хотите иметь атрибуты в ваших параметрах действия.
public class ValidateActionParametersAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
var descriptor = context.ActionDescriptor as ControllerActionDescriptor;
if (descriptor != null)
{
var parameters = descriptor.MethodInfo.GetParameters();
foreach (var parameter in parameters)
{
var argument = context.ActionArguments[parameter.Name];
EvaluateValidationAttributes(parameter, argument, context.ModelState);
}
}
base.OnActionExecuting(context);
}
private void EvaluateValidationAttributes(ParameterInfo parameter, object argument, ModelStateDictionary modelState)
{
var validationAttributes = parameter.CustomAttributes;
foreach (var attributeData in validationAttributes)
{
var attributeInstance = CustomAttributeExtensions.GetCustomAttribute(parameter, attributeData.AttributeType);
var validationAttribute = attributeInstance as ValidationAttribute;
if (validationAttribute != null)
{
var isValid = validationAttribute.IsValid(argument);
if (!isValid)
{
modelState.AddModelError(parameter.Name, validationAttribute.FormatErrorMessage(parameter.Name));
}
}
}
}
}
Но это также работает только для Actions
.Потому что класс ModelState
был создан, чтобы упростить проверку, является ли входящая привязка действительной или нет, а не только для проверки случайных объектов. Здесь - больше об этом.
Так что в вашем случае, когда AddEmail
является «нормальным» методом, а не Action
, вы не должны его использовать.В этом случае используйте другой метод проверки, такой как мой первый ответ.
И если вы хотите узнать больше о проверке, посмотрите на это сообщение в блоге Брэда Уилсона.