Web API 的使用动态结果

问题描述 投票:0回答:1

在 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);
}
c# dynamic response webapi
1个回答
0
投票

虽然返回

dynamic
有效,但普遍的共识似乎是您应该返回
IHttpActionResult
,这使您能够使用许多预定义的方法(例如
Ok()
InternalServerError()
BadRequest()
NotFound()
Redirect()
,除其他外,在返回之前正确设置请求的 HTTP 状态代码。

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

我也不太喜欢这个

[FromBody]object body
,因为使用定义明确的类型会给你带来验证,否则你将不得不自己实现。使用您在
DataAnnotations
命名空间中找到的属性来装饰所述类型会更好。

© www.soinside.com 2019 - 2024. All rights reserved.