ODataActionParameters 具有具有默认值的属性
Posted
技术标签:
【中文标题】ODataActionParameters 具有具有默认值的属性【英文标题】:ODataActionParameters to have a property with default value 【发布时间】: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”类型的对象。" 【参考方案1】:你需要在路由中添加一个带问号的参数。
请参考documentation中的belo示例。
public class BooksController : ApiController
[Route("api/books/locale/lcid:int?")]
public IEnumerable<Book> GetBooksByLocale(int lcid = 1033) ...
在此示例中,/api/books/locale/1033 和 /api/books/locale 返回相同的资源。
【讨论】:
不适用于 oDataController以上是关于ODataActionParameters 具有具有默认值的属性的主要内容,如果未能解决你的问题,请参考以下文章