c# - ODataActionParameters 具有具有默认值的属性
问题描述
我有一个场景是我需要向现有的 oData 控制器操作添加一个可选参数。这样现有的呼叫就不会中断,新的呼叫可以选择性地添加它。我试过以下
- 将 ODataActionParameters 中的值读取为可为空
var optionalParam = parameters["optionalParam"] as Boolean?;
- 将其添加为附加参数(尝试为空)并提供默认值
GetSearchdata([FromBody]ODataActionParameters parameters, bool optionalParam = false)
- 使用附加参数并将其标记为来自 Uri
GetSearchdata([FromBody]ODataActionParameters parameters, [FromUri] bool? optionalParam = false)
但是如果参数没有在正文中传递,所有这些都会给我错误。这样做的正确方法是什么?
error":{ "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));
}
解决方案
您需要在路由中添加带问号的参数。
请参考文档中的 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 返回相同的资源。
推荐阅读
- telegram - 如何使用 Telegram Bot 在消息中发送 url 链接或显示按钮以打开 URL 链接
- javascript - 如何为graphql创建对象数组
- mysql - 使用条件代码点火器选择数据
- php - 使用 codeigiter 3 和 sql 从 db 中选择 balalce
- javascript - 使用 React useState 钩子函数调用设置中止状态
- c# - 在 MVC 应用程序中调用 Web API(无 GET/POST/DELETE/UPDATE)
- javascript - 复选框切换忽略第一次单击,第二次单击后切换工作正常
- c++ - Node a 和 Node* s 有何不同?
- embedded - 由于内部闪存的内存限制,是否建议使用 SPI 闪存而不是内部闪存来运行代码?
- android - Android Progaurd 规则包名称正则表达式