C# web api的动态使用结果

C# web api的动态使用结果,c#,api,web,dynamic,response,C#,Api,Web,Dynamic,Response,在web api控制器方法中返回动态或获取对象类型是正常的做法,还是应该使用带有验证请求和常规“完整代码”的自定义契约类型 例如,下面是代码片段: public dynamic CreateOrUpdate([FromBody]object body) { return _blService.CreateOrder(body); } CreateOrder执行反序列化和保存,并返回Id或错误 下面是返回动态数据的其他方法。blService为对象列表或单个对象返

在web api控制器方法中返回动态或获取对象类型是正常的做法,还是应该使用带有验证请求和常规“完整代码”的自定义契约类型

例如,下面是代码片段:

public dynamic CreateOrUpdate([FromBody]object body)
    {
        return _blService.CreateOrder(body);
    }
CreateOrder执行反序列化和保存,并返回Id或错误

下面是返回动态数据的其他方法。blService为对象列表或单个对象返回不同的匿名类型:

    public dynamic GetOrdersByTypeId([FromQuery]Guid typeId, [FromQuery]int? pageIndex)
    {
        return _blService.GetOrdersByTypeId(typeId, pageIndex);
    }

    public dynamic GetOrderById([FromQuery]Guid id)
    {
        return _blService.GetOrderById(id);
    }

当返回
dynamic
时,普遍的共识似乎是您应该返回
IHttpActionResult
,这使您能够使用大量预定义的方法(例如
Ok()
InternalServerError()
BadRequest()
NotFound()
重定向())
在返回请求之前正确设置请求的HTTP状态代码

另外,我会编写一些POCO并返回它们,但这取决于您的偏好。您需要将它们放在一个单独的项目中,但它的优点是,在添加属性时不必更新实际的反序列化代码

我也不太喜欢
[FromBody]对象体
,因为使用定义良好的类型可以获得验证,否则必须自己实现。使用
DataAnnotations
名称空间中的属性装饰所述类型会更好