f# - 如何在 WebAPI 中使用 F# 语法返回条件状态代码
问题描述
在考虑 ActionResult 的快乐和悲伤路径场景时,我正在努力弄清楚如何让编译器快乐。
我以为我可以做到以下几点:
[<HttpGet>]
member x.GetQuery([<FromQuery>] restaurant:string) =
restaurant
|> Name
|> Query.menu
|> function
| Error _ -> (x.StatusCode 500) :> IActionResult
| Ok v -> ActionResult<DataTransfer.MenuItemTypes>(v) :> IActionResult
但是,我收到以下错误:
错误 FS0193 类型约束不匹配。“ActionResult”类型与“IActionResult”类型不兼容
如果我这样做,我可以获得要编译的代码:
[<HttpGet>]
member x.GetQuery([<FromQuery>] restaurant:string) =
restaurant
|> Name
|> Query.menu
|> function
| Error _ -> failwith "Internal Server Error"
| Ok v -> ActionResult<DataTransfer.MenuItemTypes>(v)
但是,我不想仅仅为了返回状态码而抛出异常。
解决方案
我总是使用控制器基类上的方法来创建返回值。您应该能够通过更改Ok
案例以使用该Ok
方法使其在您的第一个示例中工作:
[<HttpGet>]
member x.GetQuery([<FromQuery>] restaurant:string) =
restaurant
|> Name
|> Query.menu
|> function
| Error _ -> x.StatusCode(500) :> IActionResult
| Ok v -> x.Ok(v) :> IActionResult
推荐阅读
- ios - 如何强制 iOS 12 的主屏幕 Web 应用程序自动更新?
- javascript - 当焦点在输入字段中时,为什么日期选择器在 React 中闪烁?
- vba - 更换 PowerPoint 演示文稿中的字体时遇到问题
- c - 为什么函数指针不命名它们的参数?
- widget - 例如,如何在 odoo12 中创建一个下拉列表并用 1 到 5 的值填充它
- python - 只允许两个人使用不和谐的机器人命令
- python - 在 mac os 上安装 psycopg2 失败
- python - 如何管理两个线程,pynput鼠标监听器和while循环?
- json - 在弹性搜索中存储布尔值:优化?
- r - 将大数据集块发送到特定核心以进行 R 并行 foreach