Как вернуть условные коды состояния с использованием синтаксиса F # в WebAPI - PullRequest
1 голос
/ 09 июля 2019

Я изо всех сил пытаюсь понять, как сделать компилятор счастливым, когда учитываются как счастливые, так и печальные сценарии пути 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)

Однако я не хочу выдавать исключение только для того, чтобы вернуть код состояния.

1 Ответ

1 голос
/ 09 июля 2019

Я всегда использую методы в базовом классе контроллера для создания возвращаемого значения.Вы должны иметь возможность заставить его работать в первом примере, изменив кейс 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
...