gpt4 book ai didi

c# - 如果未发送任何内容,验证将不起作用?

转载 作者:太空狗 更新时间:2023-10-29 23:15:14 25 4
gpt4 key购买 nike

我将我的模型注释为:

public class Instance
{
[Required]
public string Name { get; set; }
public string Description { get; set; }
[Required]
public string DBServer { get; set; }
[Required]
public string Database { get; set; }
}

在 post 方法中,如果没有发送任何内容但 Model.State 为真,我会得到一个空值。如果什么都没有发送,状态怎么可能是真的呢?下一个问题是当我调用 CreateErrorResponse 方法时抛出异常(可能是因为值为 null)。

public HttpResponseMessage Post([FromBody]Instance value)
{
if (value != null && ModelState.IsValid)
{
...
}
else
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}

编辑:看来我没有解释正确。我现在尝试使用一些屏幕截图。

案例一我使用 Fiddle 发布了一个正确的值,一切都按预期工作。 ModelState.IsValid 为真。 Valid parameter

案例 2我发布了一个缺少必填字段 (DB​​Server) 的值,然后一切都按预期进行。 ModelState.IsValid 为假。

Missing required field

案例三我的问题。我发送了一个没有信息的发布请求,并且 ModelState.IsValid 为真。这看起来很奇怪,我想知道原因。谢谢大家的回答。

enter image description here

最佳答案

尝试将 ModelState 检查抽象为过滤器。您不必每次都通过这种方式检查 ModelState 以及是否存在问题

下面这段代码来自一篇关于 ModelState in WebAPI 的精彩文章:

http://www.asp.net/web-api/overview/formats-and-model-binding/model-validation-in-aspnet-web-api

using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http.Controllers;
using System.Web.Http.Filters;
using System.Web.Http.ModelBinding;

namespace MyApi.Filters
{
public class ValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (actionContext.ModelState.IsValid == false)
{
actionContext.Response = actionContext.Request.CreateErrorResponse(
HttpStatusCode.BadRequest, actionContext.ModelState);
}
}
}
}

但是,您需要了解的是,ModelState 仅检查内部值,因此您需要在调用 ModelState 之前检查该项目是否为 null。

查看此答案了解更多详情:ModelState.IsValid even when it should not be?

关于c# - 如果未发送任何内容,验证将不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20801692/

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