gpt4 book ai didi

c# - 如何让 ModelState 在 asp.net mvc web api 上工作?

转载 作者:行者123 更新时间:2023-11-30 17:54:57 26 4
gpt4 key购买 nike

这是我第一次使用 asp.net mvc webApi,并且我有 Post/Put 方法,它有一个名为 ProductViewModel 的参数。此 ViewModel 的某些属性具有要验证的数据注释,例如 Required , StringLenght等等...我有这样的发布方法:

public HttpResponseMessage Post([FromBody] ProductViewModel value)
{
if (ModelState.IsValid)
{
// persist data here...

return Request.CreateResponse(HttpStatusCode.OK);
}

return Request.CreateResponse(HttpStatusCode.BadRequest, ModelState.GetErrors());
}

我有 GetErrors()方法作为获得 List<> 的扩展我的错误并传递给客户。我的问题是:为什么 ModelState 不起作用?

如果我将 null 传递到我的 ViewModel 的属性中,则此验证根本不起作用。 IsValid属性始终为 true .有没有办法解决这个问题并让 ModelState 工作,例如 MVC?

我的模型看起来像这样:

public class ProductViewModel
{
[Display(ResourceType = typeof(Resources.Global), Name = "Name")]
[Required(ErrorMessageResourceType = typeof(Resources.Global), ErrorMessageResourceName = "Required")]
[StringLength(100, ErrorMessageResourceType = typeof(Resources.Global), ErrorMessageResourceName = "Range")]
public string Name { get; set; }

[Display(ResourceType = typeof(Resources.Global), Name = "ShortName")]
[Required(ErrorMessageResourceType = typeof(Resources.Global), ErrorMessageResourceName = "Required")]
[StringLength(20, ErrorMessageResourceType = typeof(Resources.Global), ErrorMessageResourceName = "Range")]
public string ShortName { get; set; }
}

谢谢。

最佳答案

您能否确保将 Content-Type 作为请求的一部分传递? (如果未传递内容类型,则会设置特定类型的默认值,并且模型状态不会有错误...此错误最近已修复)。

此外,您还可以执行以下操作:

return Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState)

关于c# - 如何让 ModelState 在 asp.net mvc web api 上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15531641/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com