这可能是一个非常愚蠢的问题而我错过了一些简单的
我使用Parameter绑定将字符串绑定到一个类型,然后我希望对它进行一些基本的验证。但我似乎无法得到错误消息是有帮助的。
原来我有:
[HttpPost]
[Route("user/{id:guid}/name/{name}")]
public async Task<IHttpActionResult> PostUserName(Guid id, [FromUri] Request Name)
{
....
}
public class Request
{
[Required]
[StringLength(17, MinimumLength = 17, ErrorMessage = ValidationConstants.LengthMessage)]
[RegularExpression(ValidationConstants.AlphaNumericRegex, ErrorMessage = ValidationConstants.AlphaNumericMessage)]
public string Name { get; set; }
}
错误消息看起来不错,但我的请求URI看起来像这样:
http://localhost:2010/v2/users/ {ID} /名称/ {名称}?name.Name = 784598143uurjkndgkjhajkdhfkladshfkjahsdkfjl
然后我试了
[HttpPost]
[Route("user/{id:guid}/name/{name}")]
public async Task<IHttpActionResult> PostUserName(Guid id, Request name)
{
.....
}
[TypeConverter(typeof(RequestConverter))]
public class Request
{
[Required]
[StringLength(50, MinimumLength = 1, ErrorMessage = ValidationConstants.LengthMessage)]
[RegularExpression(ValidationConstants.AlphaNumericRegex, ErrorMessage = ValidationConstants.AlphaNumericMessage)]
public string Name { get; set; }
public static bool TryParse(string s, out Request result)
{
result = new Request() { Name = s };
if (result.Name != null)
{
return false;
}
return true;
}
}
class RequestConverter : TypeConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
if (sourceType == typeof(string))
{
return true;
}
return base.CanConvertFrom(context, sourceType);
}
public override object ConvertFrom(ITypeDescriptorContext context,
CultureInfo culture, object value)
{
if (value is string)
{
Request t;
try
{
if (Request.TryParse((string)value, out t))
{
return t;
}
}
catch (Exception e)
{
throw e;
}
}
return base.ConvertFrom(context, culture, value);
}
}
}
为此,URI看起来很好:
http://localhost:2010/v2/users/ {ID} /名称/ 784598143uurjkndgkjhajkdhfkladshfkjahsdkfjl
但是验证不起作用,当我尝试抛出异常时,错误消息是通用的。
我选择这样做的原因是我希望名称是URI参数,但我也希望对其进行验证并使错误消息有意义。
有没有更简单的方法可以做到这一点,或者我错过了一些简单的东西?