Rob*_*ean 1 c# validation asp.net-mvc modelstate asp.net-web-api
我有一个简单的模型,例如:
public class Employer
{
[Required(ErrorMessage = "Please specify id")]
public int Id { get; set; }
[MaxLength(256, ErrorMessage = "Max lenght should be less than 256")]
[Required(ErrorMessage = "Please specify Name")]
public string Name { get; set; }
[Required(ErrorMessage = "Please specify id of organization")]
public int OrganizationId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
那么控制器是:
public IHttpActionResult Post(Employer employer)
{
if(!IsActiveOrganization(employer.OrganizationId))
{
ModelState.AddModelError(nameof(employer.OrganizationId), "The organization is not active!");
}
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在尝试在创建新雇主之前验证模型。因此,当我传递无效模型时id
,响应将如下:
{
"message": "The request is invalid.",
"modelState": {
"employer.Id": [
"Please specify id."
]
}
}
Run Code Online (Sandbox Code Playgroud)
我想检查是否OrganizationId
处于活动状态。为此,我有一个方法IsActiveOrganization
来检查并返回true/false
。如果false
那么我需要添加模型错误并向客户端返回 400 Bad Request。一切正常,但按照我实施的方式,我会得到如下响应:
{
"message": "The request is invalid.",
"modelState": {
"employer.Id": [
"Please specify id"
],
"OrganizationId": [
"The organization is not active!"
]
}
}
Run Code Online (Sandbox Code Playgroud)
如何为 ModelState 错误键添加前缀,就像employer.Id
我自己的错误一样OrganizationId
?我应该有硬编码employer.OrganizationId
还是有更好的方法?如果我需要添加模式详细信息,请告诉我。谢谢。
虽然nameof
非常适合避免硬编码属性名称,但它并非没有缺陷,并且您偶然发现了其中一个主要缺陷:它仅返回引用属性的名称,而不是用于访问它的完整对象图。如果您想避免硬编码,则必须执行以下操作:
ModelState.AddModelError($"{nameof(employer)}.{nameof(employer.OrganizationId)}", "Error message here");
Run Code Online (Sandbox Code Playgroud)
这并不完全漂亮,但这是你能做的最好的了。
归档时间: |
|
查看次数: |
3114 次 |
最近记录: |