在努力考虑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)
但是,我不想仅仅为了返回状态码而抛出异常。
答案 0 :(得分:1)
我总是使用控制器基类上的方法来创建返回值。通过将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