如何将查询字符串参数从Web API传递到业务层?

时间:2014-10-27 01:21:50

标签: c# .net asp.net-web-api asp.net-web-api2

Project将WebAPI暴露给外部客户端,它们将在查询字符串中嵌入多个参数值,此查询字符串数据将存储在DB中。

问题 我的愚蠢问题是如何将查询字符串值从WebAPI操作传递到业务层。

我可以想到两种方式: 1.将完整的Request对象传递给业务层。 2.将查询字符串参数转换为列表或数组,并将该列表/数组传递给业务层。

你认为传递请求在系统上有点过分或负担。我只是认为它在尺寸方面可能是一个沉重的对象。

如果我转换查询字符串参数,我是否正在针对开发良好实践或微软推荐做什么?

我非常感谢您的指导。

2 个答案:

答案 0 :(得分:1)

你可能会认为这有点过分,但我在描述他的MediatR库时遵循了Jimmy Bogard写的一些指导:

https://lostechies.com/jimmybogard/2014/09/09/tackling-cross-cutting-concerns-with-a-mediator-pipeline/

要点是将传入的请求映射到DTO对象(通常是简单的数据类),并使用管道将它们传递到业务层。这要求您映射Request对象,但是在API(WebAPI处理的)和业务域(当然是您自己的代码处理)的关注点之间提供了非常清晰的分离。

我一直在基于制造业的API中使用这种方法,并取得了非常积极的成果。

答案 1 :(得分:0)

业务层应独立于调用它的层。如果将整个Request对象传递到业务层,则会将业务层与WebAPI紧密耦合,后者被视为bad practice。想想另一种情况:如果您想从控制台应用程序或Windows服务调用相同的业务层,该怎么办?当然,您不想构建一个完整的Request对象,只是为了调用业务层。

由于您有从WebAPI到业务层的引用,您应该在业务层上定义参数对象。因此,您的业务层可以将其用作WebAPI在根据接收的请求填充后在方法调用中提供的参数。这促进了松散耦合,使您的业务层能够在不影响WebAPI层的情况下进行更改,反之亦然。

还考虑处理WebAPI层中的异常,因为在这里您可以返回正确的HTTP状态代码,即在找不到请求的对象时404 NOT FOUND。