如何在 WebAPI 中使用 F# 语法 return 条件状态代码
How do I return conditional status codes using F# syntax in WebAPI
在考虑 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
但是,我收到以下错误:
Error FS0193 Type constraint mismatch. The type
'ActionResult' is not compatible with type
'IActionResult'
如果我这样做,我可以获得要编译的代码:
[<HttpGet>]
member x.GetQuery([<FromQuery>] restaurant:string) =
restaurant
|> Name
|> Query.menu
|> function
| Error _ -> failwith "Internal Server Error"
| Ok v -> ActionResult<DataTransfer.MenuItemTypes>(v)
但是,我不想仅针对 return 状态代码抛出异常。
我总是使用控制器基础 class 上的方法来创建 return 值。您应该能够通过将 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
在考虑 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
但是,我收到以下错误:
Error FS0193 Type constraint mismatch. The type 'ActionResult' is not compatible with type 'IActionResult'
如果我这样做,我可以获得要编译的代码:
[<HttpGet>]
member x.GetQuery([<FromQuery>] restaurant:string) =
restaurant
|> Name
|> Query.menu
|> function
| Error _ -> failwith "Internal Server Error"
| Ok v -> ActionResult<DataTransfer.MenuItemTypes>(v)
但是,我不想仅针对 return 状态代码抛出异常。
我总是使用控制器基础 class 上的方法来创建 return 值。您应该能够通过将 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