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 具有具有默认值的属性的主要内容,如果未能解决你的问题,请参考以下文章

好的学术论文具都有哪些特点

极具未来感 奥迪ATOM概念跑车假想图

互联网十大最具成长性技能

互联网十大最具成长性技能

当未使用 Environment.Exit() 时,.net 程序可以具都有哪些退出代码?

你曾经工作过的最具挑战性的开发环境是啥?你做了啥来克服这些限制?