【问题标题】:How to create a webapi that allows dynamic objects with validation如何创建允许具有验证的动态对象的 webapi
【发布时间】:2021-04-08 11:55:27
【问题描述】:

我正在尝试创建一个 webapi,它在正文中接收一个 json 对象数组,如下所示:

[HttpPost]
public IActionResult Example([FromBody] JObject[] objects) {}

每个正在发送的对象都需要有一个属性IdObjectId,我该如何验证这些对象。

我尝试使用继承自 DynamicObject 的属性 Id 和 ObjectId 创建一个类,以允许其他属性。但这似乎不起作用。

【问题讨论】:

  • JObjects 有一个ContainsKey 方法,这就是你要找的吗?

标签: c# asp.net-core .net-core asp.net-core-webapi asp.net-core-5.0


【解决方案1】:

您可以创建自定义属性并将其添加到每个方法或类。属性类将在方法逻辑之前触发。例如,“RouteParameterValidator”大致如下所示...

using Microsoft.AspNetCore.Mvc.Filters;

namespace You.Custom.Namespace
{

    public class ValidateRouteParametersAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
           
            // validate route fields 
            string routeParameterValue = filterContext.ActionArguments["some_key"] as string;
            // do validation 
            if (routeParameterValue == null){
            }
                throw new InvalidParameterValueException("no way!");
            }
       }
    }
}

然后像这样在控制器中使用...

[ApiController]
[ValidateRouteParameters]
public class MyController : ControllerBase
{
  ... 
}

然后为其他属性扩展属性。我的属性使用自定义“规则”,每个规则都有一组不同的要求字段和/或长度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    相关资源
    最近更新 更多