gpt4 book ai didi

asp.net-mvc - ASP.NET Web Api OData : How to validate Delta?

转载 作者:行者123 更新时间:2023-12-03 21:37:50 29 4
gpt4 key购买 nike

我设置了一个验证框架来自动验证 Web Api 操作方法(包括 OData 操作方法)的参数。但是,这不适用于将更改的属性存储在 Delta<Entity> 中的 PATCH 请求。类型。

我已经做了一些挖掘,你可以做 see in the ASP.NET source codeDelta ,它有 NonValidatingParameterBinding属性,这意味着 Delta 's 不受验证。

现在一个明显的解决方案是应用增量,然后对结果实体执行手动验证。

但是还有其他不需要应用补丁的解决方案吗?理想情况下,它应该在调用 action 方法之前自动发生......

谢谢。

最佳答案

不验证是一个明确的设计决定 Delta<Entity> .原因是,一个 Delta<Entity>只是一个部分实体,根据定义可能是无效的。正如您已经猜到的,正确的方法是在 Delta<TEntity> 之后验证实体。应用在它上面。

示例代码,

public void Patch(Delta<Customer> delta)
{
Customer c = new Customer();
delta.Patch(c);

Validate(c, typeof(Customer));
}

private void Validate(object model, Type type)
{
var validator = Configuration.Services.GetBodyModelValidator();
var metadataProvider = Configuration.Services.GetModelMetadataProvider();

HttpActionContext actionContext = new HttpActionContext(ControllerContext, Request.GetActionDescriptor());

if (!validator.Validate(model, type, metadataProvider, actionContext, String.Empty))
{
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, actionContext.ModelState));
}
}

完整 sample here .

关于asp.net-mvc - ASP.NET Web Api OData : How to validate Delta<Entity>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18688399/

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