【发布时间】:2021-10-13 18:35:54
【问题描述】:
我有一个场景是我需要向现有的 oData 控制器操作添加一个可选参数。这样现有的呼叫就不会中断,新的呼叫可以选择性地添加它。我已经尝试了以下
- 从 ODataActionParameters 读取值作为可为空的
var optionalParam = parameters["optionalParam"] as Boolean?; - 将其添加为附加参数(尝试为空)并提供默认值
GetSearchdata([FromBody]ODataActionParameters parameters, bool optionalParam = false) - 使用附加参数并将其标记为来自 Uri
GetSearchdata([FromBody]ODataActionParameters parameters, [FromUri] bool? optionalParam = false)
但如果参数未在正文中传递,所有这些都会给我错误。这样做的正确方法是什么?
错误“:{ "code":"","message":"请求无效。","innererror":{ "message":"parameters : 请求有效负载中缺少操作“GetSearchdata”的一个或多个参数。 缺少的参数是: optionalParam。\r\n","type":"","stacktrace":"" } }
现有功能如下
[HttpPost]
[EnableQuery(MaxExpansionDepth = 100)]
public AdvancedSearchdata GetSearchdata([FromBody]ODataActionParameters parameters)
{
var moduleIdsObject = parameters["moduleIds"] as IEnumerable<int>;
return (service.GetSearchdata(moduleIdsObject.ToList(), false));
}
【问题讨论】:
-
现有调用的url是什么?
-
主机\控制器\GetSearchData。正文包含 json
-
为什么不通过创建继承的新类型向 ODataActionParameters 添加可选参数
-
现在尝试并收到此错误。 "error":{ "code":"","message":"该资源不支持请求实体的媒体类型 'application/json'。","innererror":{ "message":"没有可用的 MediaTypeFormatter从媒体类型为“application/json”的内容中读取“ODataActionParametersOptional”类型的对象。"}