如何在F#Giraffe Web API中检索URL编码形式?

时间:2019-05-07 18:51:07

标签: c# forms asp.net-core f# f#-giraffe

我正在考虑将C#ASP.NET Core中的WebAPI代码重写为F#Giraffe。 但是,对于某些特定的构造,我真的找不到对等的东西,尤其是对于以下类似的东西:

[HttpPost("DocumentValidationCallbackMessage")]
[Consumes("application/x-www-form-urlencoded")]
public async Task<IActionResult> DocumentValidationCallbackMessage([FromForm] string xml)
{
    // Controller Action implementation
}

AFAIK,长颈鹿中的路由不是由控制器供电,而是由功能choose供电:

let webApp =
    choose [
        GET >=>
            choose [
                route "/" >=> indexHandler
            ]
        setStatusCode 404 >=> text "Not Found" ]

我真的无法弄清楚如何在F#长颈鹿中解决C#ASP.NET Core属性[Consumes("application/x-www-form-urlencoded")][FromForm]的后果:如何直接检索在url中传输的值编码形式。

有什么主意吗?

1 个答案:

答案 0 :(得分:4)

module Sample = open Giraffe /// define a type for the model binding to work against. /// This is the same as saying 'the incoming form will have an string property called xml' [<CLIMutable>] type Model = { xml: string } let documentationValidationCallbackMessage: HttpHandler = route "DocumentValidationCallbackMessage" // routing >=> POST // http method >=> bindForm<Model> None (fun { xml = xml } -> // requires the content type to be 'application/x-www-form-urlencoded' and binds the content to the Model type // now do something with the xml setStatusCode 200 // in our case we're just going to set a 200 status code >=> text xml // and write the xml to the response stream ) 只是库中公开的可帮助构建Web应用程序的众多功能之一。我们可以使用许多其他方法来获得与您的样本相同的行为。下面是一个带注释的代码示例,它说明了Giraffe的设计目标,该目标使您可以将功能单元组合到一个自我描述的管道中:

{{1}}

所有这些示例都可以在documentation(包含示例)中进行更详细的介绍。

希望这会有所帮助!