我在 web api 中使用了一些版本控制技术,这些技术基本上会根据标头中指定的 api 版本调用控制器。因此,假设我们有一个名为 api/GetSalesHistory 的入口点,但我们的服务器人员(我)必须更改请求合同才能让我们做我们需要做的事情。在某些情况下,这会成为重大更改(例如新的必填字段,或已更改为列表的单个值),因此需要进行版本控制。
因此,我的路由选择器将在标头中查找 api 版本,然后调用正确的控制器。版本1控制器具有版本1请求的参数类型,版本2控制器具有版本2请求的参数类型。
这就是问题所在。开箱即用,无论您发送的有效负载如何,控制器都会运行。回到 WCF,如果您发送了错误的对象,序列化将失败,从而导致整个请求失败。现在,如果我将版本 1 有效负载发送到版本 2 控制器,而不是序列化失败或请求失败,它会创建一个带有空字段的版本 2 请求的实例,然后继续运行。所以参数不会以null的形式出现,所以我不能简单地说 if(request == null) explode;
如果未收到预期的有效负载,如何强制控制器拒绝请求?