Web APIs
Orsak isn't tied to a web framework. An effect needs an environment to run, and a request handler is a natural place to create one: from the request, and from the services of the application. Whatever framework handles the request only has to run the effect, and turn its result into a response.
This page builds the same small API with four frameworks: ASP.NET Core's minimal APIs, Giraffe, Oxpecker, and Orsak.AspNetCore. The shared part comes first, and then a section for each framework, which can be read on its own.
This page is a script: it runs with dotnet fsi docs/web-apis.fsx once Orsak is built, and the output shown is from
such a run. Scripts can't reference ASP.NET Core as a package, so it first needs
dotnet fsi docs/.tools/aspnetcore-references.fsx, which writes a script referencing the ASP.NET Core installed with
.NET. The page uses ASP.NET Core 10, Giraffe 8.3 and Oxpecker 2.1.
The shared part
The API creates orders and looks them up. The orders are kept in a store, described in the usual way, and the effects of the API are written once, for all the frameworks:
open System
open System.Collections.Concurrent
open System.Net.Http
open System.Net.Http.Json
open System.Threading
open System.Threading.Tasks
open Microsoft.AspNetCore.Builder
open Microsoft.AspNetCore.Hosting
open Microsoft.AspNetCore.Http
open Microsoft.AspNetCore.TestHost
open Microsoft.Extensions.DependencyInjection
open Microsoft.Extensions.Logging
open Orsak
type Order = { Id: int; Product: string; Quantity: int }
type NewOrder = { Product: string; Quantity: int }
type OrderError =
| NotFound of id: int
| Invalid of reason: string
type IOrderStore =
abstract member Get: id: int -> Task<Order option>
abstract member Add: NewOrder -> Task<Order>
type IOrderStoreProvider =
abstract member Orders: IOrderStore
module OrderStore =
let get id =
Effect.Create(fun (p: #IOrderStoreProvider) -> p.Orders.Get id)
let add order =
Effect.Create(fun (p: #IOrderStoreProvider) -> p.Orders.Add order)
let getOrder id = eff {
match! OrderStore.get id with
| Some order -> return order
| None -> return! Error(NotFound id)
}
let createOrder (order: NewOrder) = eff {
if order.Quantity <= 0 then
return! Error(Invalid "the quantity must be positive")
else
return! OrderStore.add order
}
The environment is created for each request. It has the store, which the application registers as a singleton
service, and the request's HttpContext, for effects that need the request:
type IRequestProvider =
abstract member Context: HttpContext
type AppEnv(context: HttpContext, orders: IOrderStore) =
interface IRequestProvider with
member _.Context = context
interface IOrderStoreProvider with
member _.Orders = orders
let createEnv (ctx: HttpContext) =
AppEnv(ctx, ctx.RequestServices.GetRequiredService<IOrderStore>())
The store keeps the orders in memory:
type InMemoryOrderStore() =
let orders = ConcurrentDictionary<int, Order>()
let mutable lastId = 0
interface IOrderStore with
member _.Get id =
Task.FromResult(
match orders.TryGetValue id with
| true, order -> Some order
| _ -> None
)
member _.Add order =
let id = Interlocked.Increment &lastId
let created = { Id = id; Product = order.Product; Quantity = order.Quantity }
orders[id] <- created
Task.FromResult created
To try each version of the API, tryApi starts it on a test server from Microsoft.AspNetCore.TestHost, which handles
requests in memory, without a port. It registers the store, lets the framework add its services and map its
routes, and then sends the same requests to each version:
let tryApi (addServices: IServiceCollection -> unit) (mapRoutes: WebApplication -> unit) =
let builder = WebApplication.CreateBuilder()
builder.WebHost.UseTestServer() |> ignore
builder.Logging.ClearProviders() |> ignore
builder.Services.AddSingleton<IOrderStore, InMemoryOrderStore>() |> ignore
addServices builder.Services
use app = builder.Build()
mapRoutes app
app.StartAsync().Wait()
use client = app.GetTestClient()
let show (request: string) (response: HttpResponseMessage) =
let body = response.Content.ReadAsStringAsync().Result
printfn $"%-50s{request} -> %d{int response.StatusCode} {body}"
client.GetAsync("/orders/1").Result |> show "GET /orders/1"
client.PostAsJsonAsync("/orders", { Product = "mug"; Quantity = 2 }).Result
|> show "POST /orders {\"product\":\"mug\",\"quantity\":2}"
client.GetAsync("/orders/1").Result |> show "GET /orders/1"
client.PostAsJsonAsync("/orders", { Product = "mug"; Quantity = 0 }).Result
|> show "POST /orders {\"product\":\"mug\",\"quantity\":0}"
app.StopAsync().Wait()
Each version responds the same way: NotFound becomes a 404, and Invalid a 400 with the reason.
Minimal APIs
A minimal API handler takes the route values and the body as parameters, and returns an IResult. Any other parameter
is a service, which ASP.NET Core resolves from its dependency injection container. The usual way to write the API is a
service class, with the store injected through its constructor, and the service injected into the handlers:
module WithServices =
type OrderService(store: IOrderStore) =
member _.Get(id: int) = store.Get id
member _.Create(order: NewOrder) : Task<Result<Order, OrderError>> = task {
if order.Quantity <= 0 then
return Error(Invalid "the quantity must be positive")
else
let! created = store.Add order
return Ok created
}
let mapOrders (app: WebApplication) =
app.MapGet(
"/orders/{id:int}",
Func<int, OrderService, Task<IResult>>(fun id orders -> task {
match! orders.Get id with
| Some order -> return Results.Ok order
| None -> return Results.NotFound()
})
)
|> ignore
app.MapPost(
"/orders",
Func<NewOrder, OrderService, Task<IResult>>(fun order orders -> task {
match! orders.Create order with
| Ok created -> return Results.Created($"/orders/{created.Id}", created)
| Error(Invalid reason) -> return Results.BadRequest reason
| Error(NotFound _) -> return Results.NotFound()
})
)
|> ignore
let addServices (services: IServiceCollection) =
services.AddScoped<OrderService>() |> ignore
F# lambdas aren't converted to Delegate on their own, so each handler is given as a Func, whose parameter types
tell ASP.NET Core where to bind each value from:
tryApi WithServices.addServices WithServices.mapOrders
|
Effects work much like this. A handler asks for what it needs, and gets it from outside, so it can be given something
else in a test. The difference is in how the asking is done. With effects, the handler creates the environment, runs
the effect, and turns its result into an IResult, with a function mapping the errors:
module WithEffects =
let toResult ok (result: Result<'a, OrderError>) =
match result with
| Ok value -> ok value
| Error(NotFound _) -> Results.NotFound()
| Error(Invalid reason) -> Results.BadRequest reason
let mapOrders (app: WebApplication) =
app.MapGet(
"/orders/{id:int}",
Func<int, HttpContext, Task<IResult>>(fun id ctx -> task {
let! result = getOrder id |> Effect.run (createEnv ctx)
return result |> toResult Results.Ok
})
)
|> ignore
app.MapPost(
"/orders",
Func<NewOrder, HttpContext, Task<IResult>>(fun order ctx -> task {
let! result = createOrder order |> Effect.run (createEnv ctx)
return result |> toResult (fun created -> Results.Created($"/orders/{created.Id}", created))
})
)
|> ignore
The responses are the same, and it needs no services of its own:
tryApi ignore WithEffects.mapOrders
|
What differs is what the types say, and when a mistake is found.
The whole chain of dependencies is in the types. The handler taking an OrderService says that it needs one, but
not what OrderService needs in turn: that is in its constructor, and what those services need is in theirs. The
full chain only comes together when the container resolves it. The type of an effect, on the other hand, includes
what every effect it binds needs. getOrder is an int -> Effect<#IOrderStoreProvider, Order, OrderError>, and if
it also read the time with Time.utcNow, its type would become
int -> Effect<#IOrderStoreProvider & #ITimeProvider, Order, OrderError>, as would the type of every effect binding
it, up to the handler. Nothing is injected out of sight.
A missing dependency is a compile error. If IOrderStore isn't registered, the version with services still
compiles and starts. In the Development environment, ASP.NET Core checks the registrations when the application is
built, and fails with:
|
In other environments, the first request needing an OrderService fails, with the second half of that message. If
AppEnv doesn't implement IOrderStoreProvider, the version with effects doesn't compile:
|
The two work together, too. createEnv gets the store from the container, which still decides lifetimes and
configuration, while the effects make it explicit which of those services each part of the application uses.
Giraffe
A Giraffe HttpHandler can run an effect like any other asynchronous work. A function turning an effect into a
handler, given a handler for its value, keeps the routes short:
module GiraffeApi =
open Giraffe
let handleEffect (ok: 'a -> HttpHandler) (effect: Effect<AppEnv, 'a, OrderError>) : HttpHandler =
fun next ctx -> task {
match! effect |> Effect.run (createEnv ctx) with
| Ok value -> return! ok value next ctx
| Error(NotFound _) -> return! RequestErrors.NOT_FOUND "" next ctx
| Error(Invalid reason) -> return! RequestErrors.BAD_REQUEST reason next ctx
}
let webApp: HttpHandler =
choose [
GET >=> routef "/orders/%i" (getOrder >> handleEffect json)
POST >=> route "/orders" >=> bindJson<NewOrder> (createOrder >> handleEffect Successful.CREATED)
]
let addServices (services: IServiceCollection) = services.AddGiraffe() |> ignore
let mapRoutes (app: WebApplication) = app.UseGiraffe webApp
routef and bindJson pass the route value and the body to a function, so composing it with handleEffect is
enough:
tryApi GiraffeApi.addServices GiraffeApi.mapRoutes
|
Oxpecker
Oxpecker's EndpointHandler takes the HttpContext and returns a Task, and the same approach works:
module OxpeckerApi =
open Oxpecker
let handleEffect (ok: 'a -> EndpointHandler) (effect: Effect<AppEnv, 'a, OrderError>) : EndpointHandler =
fun ctx -> task {
match! effect |> Effect.run (createEnv ctx) with
| Ok value -> return! ok value ctx
| Error(NotFound _) -> ctx.SetStatusCode 404
| Error(Invalid reason) ->
ctx.SetStatusCode 400
return! ctx.WriteText reason
}
let created (order: Order) : EndpointHandler =
fun ctx ->
ctx.SetStatusCode 201
ctx.WriteJson order
let endpoints = [
GET [ routef "/orders/{%i}" (getOrder >> handleEffect json) ]
POST [ route "/orders" (bindJson<NewOrder> (createOrder >> handleEffect created)) ]
]
let addServices (services: IServiceCollection) =
services.AddRouting().AddOxpecker() |> ignore
let mapRoutes (app: WebApplication) =
app.UseRouting().UseOxpecker(endpoints) |> ignore
Oxpecker writes the reason for the 400 as plain text, where the others write it as JSON:
tryApi OxpeckerApi.addServices OxpeckerApi.mapRoutes
|
Orsak.AspNetCore
Orsak.AspNetCore maps endpoints whose handlers return effects. How an effect becomes a response is up to the
application, which writes it once, as a *>> operator on a runner type. The runner here creates the environment,
runs the effect, and executes the IResult it returns, or the response for its error:
module OrsakApi =
open Orsak.AspNetCore
type Runner =
| RunWith of (HttpContext -> AppEnv)
static member ( *>> )(effect: Effect<AppEnv, IResult, OrderError>, RunWith createEnv) =
RequestDelegate(fun ctx -> task {
let! result = effect |> Effect.run (createEnv ctx)
let response =
match result with
| Ok response -> response
| Error(NotFound _) -> Results.NotFound()
| Error(Invalid reason) -> Results.BadRequest reason
return! response.ExecuteAsync ctx
})
The handlers are effects too. Route values are written as format specifiers, such as %i for an int, and named
after the handler's parameters, so /orders/%i with getOrderEndpoint maps /orders/{id:int}. The body is read by
an effect, from the request in the environment:
module Request =
let readJson () : Effect<#IRequestProvider, 'T, _> =
Effect.Create(fun (p: #IRequestProvider) -> p.Context.Request.ReadFromJsonAsync<'T>())
let getOrderEndpoint (id: int) = eff {
let! order = getOrder id
return Results.Ok order
}
let postOrderEndpoint () = eff {
let! (order: NewOrder) = Request.readJson ()
let! created = createOrder order
return Results.Created($"/orders/{created.Id}", created)
}
let mapRoutes (app: WebApplication) =
app.UseRouting().UseEndpoints(fun endpoints ->
let runner = RunWith createEnv
endpoints.MapEffectEndpoints [
runner.RouteGet("/orders/%i", getOrderEndpoint)
runner.RoutePost("/orders", postOrderEndpoint)
])
|> ignore
The handlers are passed as functions, not called, as their parameter names are read from them. Each endpoint is also
instrumented with Orsak's diagnostics, and takes conventions such as .RequiresAuthorization() and .WithName(...).
Orsak.AspNetCore needs no services of its own:
tryApi ignore OrsakApi.mapRoutes
|
val int: value: 'T -> int (requires member op_Explicit)
--------------------
type int = int32
--------------------
type int<'Measure> = int
val string: value: 'T -> string
--------------------
type string = String
type Task = interface IAsyncResult interface IDisposable new: action: Action -> unit + 7 overloads member ConfigureAwait: continueOnCapturedContext: bool -> ConfiguredTaskAwaitable + 1 overload member ContinueWith: continuationAction: Action<Task,obj> * state: obj -> Task + 19 overloads member Dispose: unit -> unit member GetAwaiter: unit -> TaskAwaiter member RunSynchronously: unit -> unit + 1 overload member Start: unit -> unit + 1 overload member Wait: unit -> unit + 5 overloads ...
<summary>Represents an asynchronous operation.</summary>
--------------------
type Task<'TResult> = inherit Task new: ``function`` : Func<obj,'TResult> * state: obj -> unit + 7 overloads member ConfigureAwait: continueOnCapturedContext: bool -> ConfiguredTaskAwaitable<'TResult> + 1 overload member ContinueWith: continuationAction: Action<Task<'TResult>,obj> * state: obj -> Task + 19 overloads member GetAwaiter: unit -> TaskAwaiter<'TResult> member WaitAsync: cancellationToken: CancellationToken -> Task<'TResult> + 4 overloads member Result: 'TResult static member Factory: TaskFactory<'TResult>
<summary>Represents an asynchronous operation that can return a value.</summary>
<typeparam name="TResult">The type of the result produced by this <see cref="T:System.Threading.Tasks.Task`1" />.</typeparam>
--------------------
Task(action: Action) : Task
Task(action: Action, cancellationToken: CancellationToken) : Task
Task(action: Action, creationOptions: TaskCreationOptions) : Task
Task(action: Action<obj>, state: obj) : Task
Task(action: Action, cancellationToken: CancellationToken, creationOptions: TaskCreationOptions) : Task
Task(action: Action<obj>, state: obj, cancellationToken: CancellationToken) : Task
Task(action: Action<obj>, state: obj, creationOptions: TaskCreationOptions) : Task
Task(action: Action<obj>, state: obj, cancellationToken: CancellationToken, creationOptions: TaskCreationOptions) : Task
--------------------
Task(``function`` : Func<'TResult>) : Task<'TResult>
Task(``function`` : Func<obj,'TResult>, state: obj) : Task<'TResult>
Task(``function`` : Func<'TResult>, cancellationToken: CancellationToken) : Task<'TResult>
Task(``function`` : Func<'TResult>, creationOptions: TaskCreationOptions) : Task<'TResult>
Task(``function`` : Func<obj,'TResult>, state: obj, cancellationToken: CancellationToken) : Task<'TResult>
Task(``function`` : Func<obj,'TResult>, state: obj, creationOptions: TaskCreationOptions) : Task<'TResult>
Task(``function`` : Func<'TResult>, cancellationToken: CancellationToken, creationOptions: TaskCreationOptions) : Task<'TResult>
Task(``function`` : Func<obj,'TResult>, state: obj, cancellationToken: CancellationToken, creationOptions: TaskCreationOptions) : Task<'TResult>
union case Effect.Effect: EffectDelegate<'r,'a,'e> -> Effect<'r,'a,'e>
--------------------
module Effect from Orsak
<summary> Functions for running, combining, recovering and repeating effects. </summary>
--------------------
type Effect = static member Create: f: ('a -> Task<Result<'b,'e>>) -> Effect<'a,'b,'e> + 2 overloads static member Error: error: 'e -> Effect<'a,'b,'e>
<summary> Creates effects. <c>Effect.Create</c> turns a function of an environment into an effect, and is how effects are made from the interfaces that describe side effects. The function may return a plain value, a <c>Result</c>, a <c>Task</c>, a <c>ValueTask</c> or an <c>Async</c>, of a value or of a <c>Result</c>; returning a <c>Result</c> lets the effect fail. </summary>
<example> The usual pattern: an interface describing the side effect, a provider interface exposing it, and a function creating the effect, which requires any environment that implements the provider (<c>#IConsoleProvider</c>). <code lang="fsharp"> type IConsole = abstract ReadLine: unit -> string abstract WriteLine: string -> unit type IConsoleProvider = abstract Console: IConsole module Console = let readLine () = Effect.Create(fun (p: #IConsoleProvider) -> p.Console.ReadLine()) let writeLine line = Effect.Create(fun (p: #IConsoleProvider) -> p.Console.WriteLine line) </code> The Orsak.Myriad generators can write the functions of such a module from the interface. </example>
--------------------
type Effect<'r,'a,'e> = | Effect of EffectDelegate<'r,'a,'e> member Run: r: 'r -> AsyncResult<'a,'e> member RunOrFail: r: 'r -> Task<'a> static member (<*>)<'b,'a (requires member (+))> : f: Effect<'r,('b -> 'a),'a0> * e: Effect<'r,'b,'a0> -> Effect<'r,'a,'a0> (requires member (+)) static member (>>=) : h: Effect<'r,'a,'e> * f: ('a -> Effect<'r,'b,'e>) -> Effect<'r,'b,'e> static member Map: h: Effect<'r,'a,'e> * f: ('a -> 'b) -> Effect<'r,'b,'e> static member Return<'a,'b,'c> : a: 'a0 -> Effect<'b,'a0,'c> static member ap<'r,'a,'b,'e> : applicative: Effect<'r,('b -> 'a),'e> -> e: Effect<'r,'b,'e> -> Effect<'r,'a,'e>
<summary> Describes an effect that can either succeed with <typeparamref name="'a" />, or fail with <typeparamref name="'e" />. The effect is 'cold', and only starts when run with an <typeparamref name="'r" />. </summary>
<remarks> Effects are usually written with the <c>eff</c> computation expression, and created from interfaces that describe side effects with <c>Effect.Create</c>. The environment <typeparamref name="'r" /> is inferred from what the effect uses, and supplied when the effect is run. </remarks>
<example><code lang="fsharp"> let greet () = eff { let! name = Console.readLine () do! Console.writeLine $"Hello {name}" } // at the composition root, with an environment providing the console effects: let! result = greet () |> Effect.run env </code></example>
<typeparam name="'r"> The environment required to run the effect </typeparam>
<typeparam name="'a"> The resulting type when the effect runs successfully </typeparam>
<typeparam name="'e"> The resulting type when the effect fails</typeparam>
static member Effect.Create: f: ('a -> Async<'b>) -> Effect<'a,'b,'a0>
static member Effect.Create: f: ('a -> Result<'b,'e>) -> Effect<'a,'b,'e>
static member Effect.Create: f: ('a -> Task<'b>) -> Effect<'a,'b,'a0>
static member Effect.Create: f: ('a -> ValueTask<'b>) -> Effect<'a,'b,'a0>
static member Effect.Create: f: ('a -> Async<Result<'b,'e>>) -> Effect<'a,'b,'e>
static member Effect.Create: f: ('a -> ValueTask<Result<'b,'e>>) -> Effect<'a,'b,'e>
static member Effect.Create: f: ('a -> Task<Result<'b,'e>>) -> Effect<'a,'b,'e>
<summary> The computation expression for writing effects. Binding (<c>let!</c>, <c>do!</c>, <c>return!</c>) works with other effects, and with <c>Task</c>, <c>ValueTask</c>, <c>Async</c> and <c>Result</c>, so .NET APIs can be used directly. It supports <c>for</c>, <c>while</c>, <c>use</c>, <c>try/with</c> and <c>try/finally</c>, and <c>and!</c> runs effects concurrently. A failed effect stops the rest of the expression, with its error. </summary>
<example><code lang="fsharp"> let placeOrder (order: Order) = eff { let! id = GuidGenerator.genGuid () let! now = Time.utcNow () do! Orders.save { order with Id = id; Placed = now } let! customer = Customers.load order.CustomerId and! stock = Stock.reserve order.Lines return id } </code></example>
type AppEnv = interface IOrderStoreProvider interface IRequestProvider new: context: HttpContext * orders: IOrderStore -> AppEnv
--------------------
new: context: HttpContext * orders: IOrderStore -> AppEnv
(extension) IServiceProvider.GetRequiredService(serviceType: Type) : obj
type InMemoryOrderStore = interface IOrderStore new: unit -> InMemoryOrderStore
--------------------
new: unit -> InMemoryOrderStore
type ConcurrentDictionary<'TKey,'TValue> = interface ICollection<KeyValuePair<'TKey,'TValue>> interface seq<KeyValuePair<'TKey,'TValue>> interface IEnumerable interface IDictionary<'TKey,'TValue> interface IReadOnlyCollection<KeyValuePair<'TKey,'TValue>> interface IReadOnlyDictionary<'TKey,'TValue> interface ICollection interface IDictionary new: unit -> unit + 6 overloads member AddOrUpdate: key: 'TKey * addValueFactory: Func<'TKey,'TValue> * updateValueFactory: Func<'TKey,'TValue,'TValue> -> 'TValue + 2 overloads ...
<summary>Represents a thread-safe collection of key/value pairs that can be accessed by multiple threads concurrently.</summary>
<typeparam name="TKey">The type of the keys in the dictionary.</typeparam>
<typeparam name="TValue">The type of the values in the dictionary.</typeparam>
--------------------
ConcurrentDictionary() : ConcurrentDictionary<'TKey,'TValue>
ConcurrentDictionary(collection: Collections.Generic.KeyValuePair<'TKey,'TValue> seq) : ConcurrentDictionary<'TKey,'TValue>
ConcurrentDictionary(comparer: Collections.Generic.IEqualityComparer<'TKey>) : ConcurrentDictionary<'TKey,'TValue>
ConcurrentDictionary(collection: Collections.Generic.KeyValuePair<'TKey,'TValue> seq, comparer: Collections.Generic.IEqualityComparer<'TKey>) : ConcurrentDictionary<'TKey,'TValue>
ConcurrentDictionary(concurrencyLevel: int, capacity: int) : ConcurrentDictionary<'TKey,'TValue>
ConcurrentDictionary(concurrencyLevel: int, collection: Collections.Generic.KeyValuePair<'TKey,'TValue> seq, comparer: Collections.Generic.IEqualityComparer<'TKey>) : ConcurrentDictionary<'TKey,'TValue>
ConcurrentDictionary(concurrencyLevel: int, capacity: int, comparer: Collections.Generic.IEqualityComparer<'TKey>) : ConcurrentDictionary<'TKey,'TValue>
<summary>Provides atomic operations for variables that are shared by multiple threads.</summary>
Interlocked.Increment(location: byref<uint32>) : uint32
Interlocked.Increment(location: byref<int64>) : int64
Interlocked.Increment(location: byref<int>) : int
WebApplication.CreateBuilder(options: WebApplicationOptions) : WebApplicationBuilder
WebApplication.CreateBuilder(args: string array) : WebApplicationBuilder
(extension) IWebHostBuilder.UseTestServer(configureOptions: Action<TestServerOptions>) : IWebHostBuilder
(extension) IServiceCollection.AddSingleton<'TService (requires reference type)>() : IServiceCollection
(extension) IServiceCollection.AddSingleton( serviceType: Type) : IServiceCollection
(extension) IServiceCollection.AddSingleton<'TService (requires reference type)>(implementationFactory: Func<IServiceProvider,'TService>) : IServiceCollection
(extension) IServiceCollection.AddSingleton<'TService,'TImplementation (requires reference type and reference type and 'TImplementation :> 'TService)>(implementationFactory: Func<IServiceProvider,'TImplementation>) : IServiceCollection
(extension) IServiceCollection.AddSingleton<'TService (requires reference type)>(implementationInstance: 'TService) : IServiceCollection
(extension) IServiceCollection.AddSingleton(serviceType: Type, implementationType: Type) : IServiceCollection
(extension) IServiceCollection.AddSingleton(serviceType: Type, implementationFactory: Func<IServiceProvider,obj>) : IServiceCollection
(extension) IServiceCollection.AddSingleton(serviceType: Type, implementationInstance: obj) : IServiceCollection
type HttpResponseMessage = interface IDisposable new: unit -> unit + 1 overload member Dispose: unit -> unit member EnsureSuccessStatusCode: unit -> HttpResponseMessage member ToString: unit -> string member Content: HttpContent member Headers: HttpResponseHeaders member IsSuccessStatusCode: bool member ReasonPhrase: string member RequestMessage: HttpRequestMessage ...
<summary>Represents a HTTP response message including the status code and data.</summary>
--------------------
HttpResponseMessage() : HttpResponseMessage
HttpResponseMessage(statusCode: Net.HttpStatusCode) : HttpResponseMessage
<summary>Gets or sets the content of a HTTP response message.</summary>
<returns>The content of the HTTP response message.</returns>
HttpContent.ReadAsStringAsync(cancellationToken: CancellationToken) : Task<string>
module Result from Microsoft.FSharp.Core
--------------------
type Result<'T,'TError> = | Ok of ResultValue: 'T | Error of ErrorValue: 'TError
<summary>Gets or sets the status code of the HTTP response.</summary>
<returns>The status code of the HTTP response.</returns>
HttpClient.GetAsync( requestUri: string) : Task<HttpResponseMessage>
HttpClient.GetAsync(requestUri: Uri, cancellationToken: CancellationToken) : Task<HttpResponseMessage>
HttpClient.GetAsync(requestUri: Uri, completionOption: HttpCompletionOption) : Task<HttpResponseMessage>
HttpClient.GetAsync( requestUri: string, cancellationToken: CancellationToken) : Task<HttpResponseMessage>
HttpClient.GetAsync( requestUri: string, completionOption: HttpCompletionOption) : Task<HttpResponseMessage>
HttpClient.GetAsync(requestUri: Uri, completionOption: HttpCompletionOption, cancellationToken: CancellationToken) : Task<HttpResponseMessage>
HttpClient.GetAsync( requestUri: string, completionOption: HttpCompletionOption, cancellationToken: CancellationToken) : Task<HttpResponseMessage>
(extension) HttpClient.PostAsJsonAsync<'TValue>(requestUri: Uri, value: 'TValue, cancellationToken: CancellationToken) : Task<HttpResponseMessage>
(extension) HttpClient.PostAsJsonAsync<'TValue>( requestUri: string, value: 'TValue, ?options: Text.Json.JsonSerializerOptions, ?cancellationToken: CancellationToken) : Task<HttpResponseMessage>
(extension) HttpClient.PostAsJsonAsync<'TValue>( requestUri: string, value: 'TValue, jsonTypeInfo: Text.Json.Serialization.Metadata.JsonTypeInfo<'TValue>, ?cancellationToken: CancellationToken) : Task<HttpResponseMessage>
(extension) HttpClient.PostAsJsonAsync<'TValue>(requestUri: Uri, value: 'TValue, ?options: Text.Json.JsonSerializerOptions, ?cancellationToken: CancellationToken) : Task<HttpResponseMessage>
(extension) HttpClient.PostAsJsonAsync<'TValue>(requestUri: Uri, value: 'TValue, jsonTypeInfo: Text.Json.Serialization.Metadata.JsonTypeInfo<'TValue>, ?cancellationToken: CancellationToken) : Task<HttpResponseMessage>
type OrderService = new: store: IOrderStore -> OrderService member Create: order: NewOrder -> Task<Result<Order,OrderError>> member Get: id: int -> Task<Order option>
--------------------
new: store: IOrderStore -> OrderService
(extension) AspNetCore.Routing.IEndpointRouteBuilder.MapGet( pattern: string, handler: Delegate) : RouteHandlerBuilder
type Func<'TResult (allows ref struct)> = new: object: obj * method: nativeint -> unit member BeginInvoke: callback: AsyncCallback * object: obj -> IAsyncResult member EndInvoke: result: IAsyncResult -> 'TResult member Invoke: unit -> 'TResult
<summary>Encapsulates a method that has no parameters and returns a value of the type specified by the <typeparamref name="TResult" /> parameter.</summary>
<typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam>
<returns>The return value of the method that this delegate encapsulates.</returns>
--------------------
type Func<'T,'TResult (allows ref struct and allows ref struct)> = new: object: obj * method: nativeint -> unit member BeginInvoke: arg: 'T * callback: AsyncCallback * object: obj -> IAsyncResult member EndInvoke: result: IAsyncResult -> 'TResult member Invoke: arg: 'T -> 'TResult
<summary>Encapsulates a method that has one parameter and returns a value of the type specified by the <typeparamref name="TResult" /> parameter.</summary>
<param name="arg">The parameter of the method that this delegate encapsulates.</param>
<typeparam name="T">The type of the parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam>
<returns>The return value of the method that this delegate encapsulates.</returns>
--------------------
type Func<'T1,'T2,'TResult (allows ref struct and allows ref struct and allows ref struct)> = new: object: obj * method: nativeint -> unit member BeginInvoke: arg1: 'T1 * arg2: 'T2 * callback: AsyncCallback * object: obj -> IAsyncResult member EndInvoke: result: IAsyncResult -> 'TResult member Invoke: arg1: 'T1 * arg2: 'T2 -> 'TResult
<summary>Encapsulates a method that has two parameters and returns a value of the type specified by the <typeparamref name="TResult" /> parameter.</summary>
<param name="arg1">The first parameter of the method that this delegate encapsulates.</param>
<param name="arg2">The second parameter of the method that this delegate encapsulates.</param>
<typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam>
<returns>The return value of the method that this delegate encapsulates.</returns>
--------------------
type Func<'T1,'T2,'T3,'TResult (allows ref struct and allows ref struct and allows ref struct and allows ref struct)> = new: object: obj * method: nativeint -> unit member BeginInvoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * callback: AsyncCallback * object: obj -> IAsyncResult member EndInvoke: result: IAsyncResult -> 'TResult member Invoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 -> 'TResult
<summary>Encapsulates a method that has three parameters and returns a value of the type specified by the <typeparamref name="TResult" /> parameter.</summary>
<param name="arg1">The first parameter of the method that this delegate encapsulates.</param>
<param name="arg2">The second parameter of the method that this delegate encapsulates.</param>
<param name="arg3">The third parameter of the method that this delegate encapsulates.</param>
<typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam>
<returns>The return value of the method that this delegate encapsulates.</returns>
--------------------
type Func<'T1,'T2,'T3,'T4,'TResult (allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct)> = new: object: obj * method: nativeint -> unit member BeginInvoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * callback: AsyncCallback * object: obj -> IAsyncResult member EndInvoke: result: IAsyncResult -> 'TResult member Invoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 -> 'TResult
<summary>Encapsulates a method that has four parameters and returns a value of the type specified by the <typeparamref name="TResult" /> parameter.</summary>
<param name="arg1">The first parameter of the method that this delegate encapsulates.</param>
<param name="arg2">The second parameter of the method that this delegate encapsulates.</param>
<param name="arg3">The third parameter of the method that this delegate encapsulates.</param>
<param name="arg4">The fourth parameter of the method that this delegate encapsulates.</param>
<typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T4">The type of the fourth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam>
<returns>The return value of the method that this delegate encapsulates.</returns>
--------------------
type Func<'T1,'T2,'T3,'T4,'T5,'TResult (allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct)> = new: object: obj * method: nativeint -> unit member BeginInvoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * arg5: 'T5 * callback: AsyncCallback * object: obj -> IAsyncResult member EndInvoke: result: IAsyncResult -> 'TResult member Invoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * arg5: 'T5 -> 'TResult
<summary>Encapsulates a method that has five parameters and returns a value of the type specified by the <typeparamref name="TResult" /> parameter.</summary>
<param name="arg1">The first parameter of the method that this delegate encapsulates.</param>
<param name="arg2">The second parameter of the method that this delegate encapsulates.</param>
<param name="arg3">The third parameter of the method that this delegate encapsulates.</param>
<param name="arg4">The fourth parameter of the method that this delegate encapsulates.</param>
<param name="arg5">The fifth parameter of the method that this delegate encapsulates.</param>
<typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T4">The type of the fourth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T5">The type of the fifth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam>
<returns>The return value of the method that this delegate encapsulates.</returns>
--------------------
type Func<'T1,'T2,'T3,'T4,'T5,'T6,'TResult (allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct)> = new: object: obj * method: nativeint -> unit member BeginInvoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * arg5: 'T5 * arg6: 'T6 * callback: AsyncCallback * object: obj -> IAsyncResult member EndInvoke: result: IAsyncResult -> 'TResult member Invoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * arg5: 'T5 * arg6: 'T6 -> 'TResult
<summary>Encapsulates a method that has six parameters and returns a value of the type specified by the <typeparamref name="TResult" /> parameter.</summary>
<param name="arg1">The first parameter of the method that this delegate encapsulates.</param>
<param name="arg2">The second parameter of the method that this delegate encapsulates.</param>
<param name="arg3">The third parameter of the method that this delegate encapsulates.</param>
<param name="arg4">The fourth parameter of the method that this delegate encapsulates.</param>
<param name="arg5">The fifth parameter of the method that this delegate encapsulates.</param>
<param name="arg6">The sixth parameter of the method that this delegate encapsulates.</param>
<typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T4">The type of the fourth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T5">The type of the fifth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T6">The type of the sixth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam>
<returns>The return value of the method that this delegate encapsulates.</returns>
--------------------
type Func<'T1,'T2,'T3,'T4,'T5,'T6,'T7,'TResult (allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct)> = new: object: obj * method: nativeint -> unit member BeginInvoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * arg5: 'T5 * arg6: 'T6 * arg7: 'T7 * callback: AsyncCallback * object: obj -> IAsyncResult member EndInvoke: result: IAsyncResult -> 'TResult member Invoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * arg5: 'T5 * arg6: 'T6 * arg7: 'T7 -> 'TResult
<summary>Encapsulates a method that has seven parameters and returns a value of the type specified by the <typeparamref name="TResult" /> parameter.</summary>
<param name="arg1">The first parameter of the method that this delegate encapsulates.</param>
<param name="arg2">The second parameter of the method that this delegate encapsulates.</param>
<param name="arg3">The third parameter of the method that this delegate encapsulates.</param>
<param name="arg4">The fourth parameter of the method that this delegate encapsulates.</param>
<param name="arg5">The fifth parameter of the method that this delegate encapsulates.</param>
<param name="arg6">The sixth parameter of the method that this delegate encapsulates.</param>
<param name="arg7">The seventh parameter of the method that this delegate encapsulates.</param>
<typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T4">The type of the fourth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T5">The type of the fifth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T6">The type of the sixth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T7">The type of the seventh parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam>
<returns>The return value of the method that this delegate encapsulates.</returns>
--------------------
type Func<'T1,'T2,'T3,'T4,'T5,'T6,'T7,'T8,'TResult (allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct)> = new: object: obj * method: nativeint -> unit member BeginInvoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * arg5: 'T5 * arg6: 'T6 * arg7: 'T7 * arg8: 'T8 * callback: AsyncCallback * object: obj -> IAsyncResult member EndInvoke: result: IAsyncResult -> 'TResult member Invoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * arg5: 'T5 * arg6: 'T6 * arg7: 'T7 * arg8: 'T8 -> 'TResult
<summary>Encapsulates a method that has eight parameters and returns a value of the type specified by the <typeparamref name="TResult" /> parameter.</summary>
<param name="arg1">The first parameter of the method that this delegate encapsulates.</param>
<param name="arg2">The second parameter of the method that this delegate encapsulates.</param>
<param name="arg3">The third parameter of the method that this delegate encapsulates.</param>
<param name="arg4">The fourth parameter of the method that this delegate encapsulates.</param>
<param name="arg5">The fifth parameter of the method that this delegate encapsulates.</param>
<param name="arg6">The sixth parameter of the method that this delegate encapsulates.</param>
<param name="arg7">The seventh parameter of the method that this delegate encapsulates.</param>
<param name="arg8">The eighth parameter of the method that this delegate encapsulates.</param>
<typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T4">The type of the fourth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T5">The type of the fifth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T6">The type of the sixth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T7">The type of the seventh parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T8">The type of the eighth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam>
<returns>The return value of the method that this delegate encapsulates.</returns>
--------------------
type Func<'T1,'T2,'T3,'T4,'T5,'T6,'T7,'T8,'T9,'TResult (allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct)> = new: object: obj * method: nativeint -> unit member BeginInvoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * arg5: 'T5 * arg6: 'T6 * arg7: 'T7 * arg8: 'T8 * arg9: 'T9 * callback: AsyncCallback * object: obj -> IAsyncResult member EndInvoke: result: IAsyncResult -> 'TResult member Invoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * arg5: 'T5 * arg6: 'T6 * arg7: 'T7 * arg8: 'T8 * arg9: 'T9 -> 'TResult
<summary>Encapsulates a method that has nine parameters and returns a value of the type specified by the <typeparamref name="TResult" /> parameter.</summary>
<param name="arg1">The first parameter of the method that this delegate encapsulates.</param>
<param name="arg2">The second parameter of the method that this delegate encapsulates.</param>
<param name="arg3">The third parameter of the method that this delegate encapsulates.</param>
<param name="arg4">The fourth parameter of the method that this delegate encapsulates.</param>
<param name="arg5">The fifth parameter of the method that this delegate encapsulates.</param>
<param name="arg6">The sixth parameter of the method that this delegate encapsulates.</param>
<param name="arg7">The seventh parameter of the method that this delegate encapsulates.</param>
<param name="arg8">The eighth parameter of the method that this delegate encapsulates.</param>
<param name="arg9">The ninth parameter of the method that this delegate encapsulates.</param>
<typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T4">The type of the fourth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T5">The type of the fifth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T6">The type of the sixth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T7">The type of the seventh parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T8">The type of the eighth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T9">The type of the ninth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam>
<returns>The return value of the method that this delegate encapsulates.</returns>
--------------------
type Func<'T1,'T2,'T3,'T4,'T5,'T6,'T7,'T8,'T9,'T10,'TResult (allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct)> = new: object: obj * method: nativeint -> unit member BeginInvoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * arg5: 'T5 * arg6: 'T6 * arg7: 'T7 * arg8: 'T8 * arg9: 'T9 * arg10: 'T10 * callback: AsyncCallback * object: obj -> IAsyncResult member EndInvoke: result: IAsyncResult -> 'TResult member Invoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * arg5: 'T5 * arg6: 'T6 * arg7: 'T7 * arg8: 'T8 * arg9: 'T9 * arg10: 'T10 -> 'TResult
<summary>Encapsulates a method that has 10 parameters and returns a value of the type specified by the <typeparamref name="TResult" /> parameter.</summary>
<param name="arg1">The first parameter of the method that this delegate encapsulates.</param>
<param name="arg2">The second parameter of the method that this delegate encapsulates.</param>
<param name="arg3">The third parameter of the method that this delegate encapsulates.</param>
<param name="arg4">The fourth parameter of the method that this delegate encapsulates.</param>
<param name="arg5">The fifth parameter of the method that this delegate encapsulates.</param>
<param name="arg6">The sixth parameter of the method that this delegate encapsulates.</param>
<param name="arg7">The seventh parameter of the method that this delegate encapsulates.</param>
<param name="arg8">The eighth parameter of the method that this delegate encapsulates.</param>
<param name="arg9">The ninth parameter of the method that this delegate encapsulates.</param>
<param name="arg10">The tenth parameter of the method that this delegate encapsulates.</param>
<typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T4">The type of the fourth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T5">The type of the fifth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T6">The type of the sixth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T7">The type of the seventh parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T8">The type of the eighth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T9">The type of the ninth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T10">The type of the tenth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam>
<returns>The return value of the method that this delegate encapsulates.</returns>
--------------------
type Func<'T1,'T2,'T3,'T4,'T5,'T6,'T7,'T8,'T9,'T10,'T11,'TResult (allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct)> = new: object: obj * method: nativeint -> unit member BeginInvoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * arg5: 'T5 * arg6: 'T6 * arg7: 'T7 * arg8: 'T8 * arg9: 'T9 * arg10: 'T10 * arg11: 'T11 * callback: AsyncCallback * object: obj -> IAsyncResult member EndInvoke: result: IAsyncResult -> 'TResult member Invoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * arg5: 'T5 * arg6: 'T6 * arg7: 'T7 * arg8: 'T8 * arg9: 'T9 * arg10: 'T10 * arg11: 'T11 -> 'TResult
<summary>Encapsulates a method that has 11 parameters and returns a value of the type specified by the <typeparamref name="TResult" /> parameter.</summary>
<param name="arg1">The first parameter of the method that this delegate encapsulates.</param>
<param name="arg2">The second parameter of the method that this delegate encapsulates.</param>
<param name="arg3">The third parameter of the method that this delegate encapsulates.</param>
<param name="arg4">The fourth parameter of the method that this delegate encapsulates.</param>
<param name="arg5">The fifth parameter of the method that this delegate encapsulates.</param>
<param name="arg6">The sixth parameter of the method that this delegate encapsulates.</param>
<param name="arg7">The seventh parameter of the method that this delegate encapsulates.</param>
<param name="arg8">The eighth parameter of the method that this delegate encapsulates.</param>
<param name="arg9">The ninth parameter of the method that this delegate encapsulates.</param>
<param name="arg10">The tenth parameter of the method that this delegate encapsulates.</param>
<param name="arg11">The eleventh parameter of the method that this delegate encapsulates.</param>
<typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T4">The type of the fourth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T5">The type of the fifth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T6">The type of the sixth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T7">The type of the seventh parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T8">The type of the eighth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T9">The type of the ninth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T10">The type of the tenth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T11">The type of the eleventh parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam>
<returns>The return value of the method that this delegate encapsulates.</returns>
--------------------
type Func<'T1,'T2,'T3,'T4,'T5,'T6,'T7,'T8,'T9,'T10,'T11,'T12,'TResult (allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct)> = new: object: obj * method: nativeint -> unit member BeginInvoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * arg5: 'T5 * arg6: 'T6 * arg7: 'T7 * arg8: 'T8 * arg9: 'T9 * arg10: 'T10 * arg11: 'T11 * arg12: 'T12 * callback: AsyncCallback * object: obj -> IAsyncResult member EndInvoke: result: IAsyncResult -> 'TResult member Invoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * arg5: 'T5 * arg6: 'T6 * arg7: 'T7 * arg8: 'T8 * arg9: 'T9 * arg10: 'T10 * arg11: 'T11 * arg12: 'T12 -> 'TResult
<summary>Encapsulates a method that has 12 parameters and returns a value of the type specified by the <typeparamref name="TResult" /> parameter.</summary>
<param name="arg1">The first parameter of the method that this delegate encapsulates.</param>
<param name="arg2">The second parameter of the method that this delegate encapsulates.</param>
<param name="arg3">The third parameter of the method that this delegate encapsulates.</param>
<param name="arg4">The fourth parameter of the method that this delegate encapsulates.</param>
<param name="arg5">The fifth parameter of the method that this delegate encapsulates.</param>
<param name="arg6">The sixth parameter of the method that this delegate encapsulates.</param>
<param name="arg7">The seventh parameter of the method that this delegate encapsulates.</param>
<param name="arg8">The eighth parameter of the method that this delegate encapsulates.</param>
<param name="arg9">The ninth parameter of the method that this delegate encapsulates.</param>
<param name="arg10">The tenth parameter of the method that this delegate encapsulates.</param>
<param name="arg11">The eleventh parameter of the method that this delegate encapsulates.</param>
<param name="arg12">The twelfth parameter of the method that this delegate encapsulates.</param>
<typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T4">The type of the fourth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T5">The type of the fifth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T6">The type of the sixth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T7">The type of the seventh parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T8">The type of the eighth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T9">The type of the ninth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T10">The type of the tenth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T11">The type of the eleventh parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T12">The type of the twelfth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam>
<returns>The return value of the method that this delegate encapsulates.</returns>
--------------------
type Func<'T1,'T2,'T3,'T4,'T5,'T6,'T7,'T8,'T9,'T10,'T11,'T12,'T13,'TResult (allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct)> = new: object: obj * method: nativeint -> unit member BeginInvoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * arg5: 'T5 * arg6: 'T6 * arg7: 'T7 * arg8: 'T8 * arg9: 'T9 * arg10: 'T10 * arg11: 'T11 * arg12: 'T12 * arg13: 'T13 * callback: AsyncCallback * object: obj -> IAsyncResult member EndInvoke: result: IAsyncResult -> 'TResult member Invoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * arg5: 'T5 * arg6: 'T6 * arg7: 'T7 * arg8: 'T8 * arg9: 'T9 * arg10: 'T10 * arg11: 'T11 * arg12: 'T12 * arg13: 'T13 -> 'TResult
<summary>Encapsulates a method that has 13 parameters and returns a value of the type specified by the <typeparamref name="TResult" /> parameter.</summary>
<param name="arg1">The first parameter of the method that this delegate encapsulates.</param>
<param name="arg2">The second parameter of the method that this delegate encapsulates.</param>
<param name="arg3">The third parameter of the method that this delegate encapsulates.</param>
<param name="arg4">The fourth parameter of the method that this delegate encapsulates.</param>
<param name="arg5">The fifth parameter of the method that this delegate encapsulates.</param>
<param name="arg6">The sixth parameter of the method that this delegate encapsulates.</param>
<param name="arg7">The seventh parameter of the method that this delegate encapsulates.</param>
<param name="arg8">The eighth parameter of the method that this delegate encapsulates.</param>
<param name="arg9">The ninth parameter of the method that this delegate encapsulates.</param>
<param name="arg10">The tenth parameter of the method that this delegate encapsulates.</param>
<param name="arg11">The eleventh parameter of the method that this delegate encapsulates.</param>
<param name="arg12">The twelfth parameter of the method that this delegate encapsulates.</param>
<param name="arg13">The thirteenth parameter of the method that this delegate encapsulates.</param>
<typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T4">The type of the fourth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T5">The type of the fifth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T6">The type of the sixth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T7">The type of the seventh parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T8">The type of the eighth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T9">The type of the ninth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T10">The type of the tenth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T11">The type of the eleventh parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T12">The type of the twelfth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T13">The type of the thirteenth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam>
<returns>The return value of the method that this delegate encapsulates.</returns>
--------------------
type Func<'T1,'T2,'T3,'T4,'T5,'T6,'T7,'T8,'T9,'T10,'T11,'T12,'T13,'T14,'TResult (allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct)> = new: object: obj * method: nativeint -> unit member BeginInvoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * arg5: 'T5 * arg6: 'T6 * arg7: 'T7 * arg8: 'T8 * arg9: 'T9 * arg10: 'T10 * arg11: 'T11 * arg12: 'T12 * arg13: 'T13 * arg14: 'T14 * callback: AsyncCallback * object: obj -> IAsyncResult member EndInvoke: result: IAsyncResult -> 'TResult member Invoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * arg5: 'T5 * arg6: 'T6 * arg7: 'T7 * arg8: 'T8 * arg9: 'T9 * arg10: 'T10 * arg11: 'T11 * arg12: 'T12 * arg13: 'T13 * arg14: 'T14 -> 'TResult
<summary>Encapsulates a method that has 14 parameters and returns a value of the type specified by the <typeparamref name="TResult" /> parameter.</summary>
<param name="arg1">The first parameter of the method that this delegate encapsulates.</param>
<param name="arg2">The second parameter of the method that this delegate encapsulates.</param>
<param name="arg3">The third parameter of the method that this delegate encapsulates.</param>
<param name="arg4">The fourth parameter of the method that this delegate encapsulates.</param>
<param name="arg5">The fifth parameter of the method that this delegate encapsulates.</param>
<param name="arg6">The sixth parameter of the method that this delegate encapsulates.</param>
<param name="arg7">The seventh parameter of the method that this delegate encapsulates.</param>
<param name="arg8">The eighth parameter of the method that this delegate encapsulates.</param>
<param name="arg9">The ninth parameter of the method that this delegate encapsulates.</param>
<param name="arg10">The tenth parameter of the method that this delegate encapsulates.</param>
<param name="arg11">The eleventh parameter of the method that this delegate encapsulates.</param>
<param name="arg12">The twelfth parameter of the method that this delegate encapsulates.</param>
<param name="arg13">The thirteenth parameter of the method that this delegate encapsulates.</param>
<param name="arg14">The fourteenth parameter of the method that this delegate encapsulates.</param>
<typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T4">The type of the fourth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T5">The type of the fifth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T6">The type of the sixth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T7">The type of the seventh parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T8">The type of the eighth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T9">The type of the ninth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T10">The type of the tenth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T11">The type of the eleventh parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T12">The type of the twelfth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T13">The type of the thirteenth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T14">The type of the fourteenth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam>
<returns>The return value of the method that this delegate encapsulates.</returns>
--------------------
type Func<'T1,'T2,'T3,'T4,'T5,'T6,'T7,'T8,'T9,'T10,'T11,'T12,'T13,'T14,'T15,'TResult (allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct)> = new: object: obj * method: nativeint -> unit member BeginInvoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * arg5: 'T5 * arg6: 'T6 * arg7: 'T7 * arg8: 'T8 * arg9: 'T9 * arg10: 'T10 * arg11: 'T11 * arg12: 'T12 * arg13: 'T13 * arg14: 'T14 * arg15: 'T15 * callback: AsyncCallback * object: obj -> IAsyncResult member EndInvoke: result: IAsyncResult -> 'TResult member Invoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * arg5: 'T5 * arg6: 'T6 * arg7: 'T7 * arg8: 'T8 * arg9: 'T9 * arg10: 'T10 * arg11: 'T11 * arg12: 'T12 * arg13: 'T13 * arg14: 'T14 * arg15: 'T15 -> 'TResult
<summary>Encapsulates a method that has 15 parameters and returns a value of the type specified by the <typeparamref name="TResult" /> parameter.</summary>
<param name="arg1">The first parameter of the method that this delegate encapsulates.</param>
<param name="arg2">The second parameter of the method that this delegate encapsulates.</param>
<param name="arg3">The third parameter of the method that this delegate encapsulates.</param>
<param name="arg4">The fourth parameter of the method that this delegate encapsulates.</param>
<param name="arg5">The fifth parameter of the method that this delegate encapsulates.</param>
<param name="arg6">The sixth parameter of the method that this delegate encapsulates.</param>
<param name="arg7">The seventh parameter of the method that this delegate encapsulates.</param>
<param name="arg8">The eighth parameter of the method that this delegate encapsulates.</param>
<param name="arg9">The ninth parameter of the method that this delegate encapsulates.</param>
<param name="arg10">The tenth parameter of the method that this delegate encapsulates.</param>
<param name="arg11">The eleventh parameter of the method that this delegate encapsulates.</param>
<param name="arg12">The twelfth parameter of the method that this delegate encapsulates.</param>
<param name="arg13">The thirteenth parameter of the method that this delegate encapsulates.</param>
<param name="arg14">The fourteenth parameter of the method that this delegate encapsulates.</param>
<param name="arg15">The fifteenth parameter of the method that this delegate encapsulates.</param>
<typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T4">The type of the fourth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T5">The type of the fifth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T6">The type of the sixth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T7">The type of the seventh parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T8">The type of the eighth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T9">The type of the ninth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T10">The type of the tenth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T11">The type of the eleventh parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T12">The type of the twelfth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T13">The type of the thirteenth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T14">The type of the fourteenth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T15">The type of the fifteenth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam>
<returns>The return value of the method that this delegate encapsulates.</returns>
--------------------
type Func<'T1,'T2,'T3,'T4,'T5,'T6,'T7,'T8,'T9,'T10,'T11,'T12,'T13,'T14,'T15,'T16,'TResult (allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct and allows ref struct)> = new: object: obj * method: nativeint -> unit member BeginInvoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * arg5: 'T5 * arg6: 'T6 * arg7: 'T7 * arg8: 'T8 * arg9: 'T9 * arg10: 'T10 * arg11: 'T11 * arg12: 'T12 * arg13: 'T13 * arg14: 'T14 * arg15: 'T15 * arg16: 'T16 * callback: AsyncCallback * object: obj -> IAsyncResult member EndInvoke: result: IAsyncResult -> 'TResult member Invoke: arg1: 'T1 * arg2: 'T2 * arg3: 'T3 * arg4: 'T4 * arg5: 'T5 * arg6: 'T6 * arg7: 'T7 * arg8: 'T8 * arg9: 'T9 * arg10: 'T10 * arg11: 'T11 * arg12: 'T12 * arg13: 'T13 * arg14: 'T14 * arg15: 'T15 * arg16: 'T16 -> 'TResult
<summary>Encapsulates a method that has 16 parameters and returns a value of the type specified by the <typeparamref name="TResult" /> parameter.</summary>
<param name="arg1">The first parameter of the method that this delegate encapsulates.</param>
<param name="arg2">The second parameter of the method that this delegate encapsulates.</param>
<param name="arg3">The third parameter of the method that this delegate encapsulates.</param>
<param name="arg4">The fourth parameter of the method that this delegate encapsulates.</param>
<param name="arg5">The fifth parameter of the method that this delegate encapsulates.</param>
<param name="arg6">The sixth parameter of the method that this delegate encapsulates.</param>
<param name="arg7">The seventh parameter of the method that this delegate encapsulates.</param>
<param name="arg8">The eighth parameter of the method that this delegate encapsulates.</param>
<param name="arg9">The ninth parameter of the method that this delegate encapsulates.</param>
<param name="arg10">The tenth parameter of the method that this delegate encapsulates.</param>
<param name="arg11">The eleventh parameter of the method that this delegate encapsulates.</param>
<param name="arg12">The twelfth parameter of the method that this delegate encapsulates.</param>
<param name="arg13">The thirteenth parameter of the method that this delegate encapsulates.</param>
<param name="arg14">The fourteenth parameter of the method that this delegate encapsulates.</param>
<param name="arg15">The fifteenth parameter of the method that this delegate encapsulates.</param>
<param name="arg16">The sixteenth parameter of the method that this delegate encapsulates.</param>
<typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T4">The type of the fourth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T5">The type of the fifth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T6">The type of the sixth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T7">The type of the seventh parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T8">The type of the eighth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T9">The type of the ninth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T10">The type of the tenth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T11">The type of the eleventh parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T12">The type of the twelfth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T13">The type of the thirteenth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T14">The type of the fourteenth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T15">The type of the fifteenth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="T16">The type of the sixteenth parameter of the method that this delegate encapsulates.</typeparam>
<typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam>
<returns>The return value of the method that this delegate encapsulates.</returns>
Results.Ok(?value: obj) : IResult
Results.NotFound(?value: obj) : IResult
(extension) AspNetCore.Routing.IEndpointRouteBuilder.MapPost( pattern: string, handler: Delegate) : RouteHandlerBuilder
Results.Created<'TValue>(uri: Uri, value: 'TValue) : IResult
Results.Created(uri: Uri, value: obj) : IResult
Results.Created<'TValue>(uri: string, value: 'TValue) : IResult
Results.Created(uri: string, value: obj) : IResult
Results.BadRequest(?error: obj) : IResult
(extension) IServiceCollection.AddScoped<'TService (requires reference type)>() : IServiceCollection
(extension) IServiceCollection.AddScoped( serviceType: Type) : IServiceCollection
(extension) IServiceCollection.AddScoped<'TService (requires reference type)>(implementationFactory: Func<IServiceProvider,'TService>) : IServiceCollection
(extension) IServiceCollection.AddScoped<'TService,'TImplementation (requires reference type and reference type and 'TImplementation :> 'TService)>(implementationFactory: Func<IServiceProvider,'TImplementation>) : IServiceCollection
(extension) IServiceCollection.AddScoped(serviceType: Type, implementationType: Type) : IServiceCollection
(extension) IServiceCollection.AddScoped(serviceType: Type, implementationFactory: Func<IServiceProvider,obj>) : IServiceCollection
<summary> Starts the effect. </summary>
<typeparam name="'r"> The environment required to run the effect </typeparam>
<typeparam name="'a"> The resulting type when the effect runs successfully </typeparam>
<typeparam name="'e"> The resulting type when the effect fails</typeparam>
<param name="env">The environment needed to start the effect</param>
<param name="e">The effect to run</param>
<example><code lang="fsharp"> task { match! placeOrder order |> Effect.run env with | Ok id -> printfn $"Placed {id}" | Error err -> printfn $"Failed: {err}" } </code></example>
<summary> A HTTP handler is the core building block of a Giraffe web application. It works similarly to ASP.NET Core's middleware where it is self responsible for invoking the next <see cref="HttpFunc" /> function of the pipeline or shortcircuit the execution by directly returning a <see cref="System.Threading.Tasks.Task" /> of HttpContext option. </summary>
<summary> A collection of <see cref="HttpHandler" /> functions to return HTTP status code 4xx responses. </summary>
<summary> Iterates through a list of <see cref="HttpHandler" /> functions and returns the result of the first <see cref="HttpHandler" /> of which the outcome is Some HttpContext. Please mind that all <see cref="HttpHandler" /> functions will get pre-evaluated at runtime by applying the next (HttpFunc) parameter to each handler. </summary>
<param name="handlers"></param>
<param name="next"></param>
<returns>A <see cref="HttpFunc" />.</returns>
<summary> Filters an incoming HTTP request based on the request path (case sensitive). If the route matches the incoming HTTP request then the arguments from the <see cref="Microsoft.FSharp.Core.PrintfFormat" /> will be automatically resolved and passed into the supplied routeHandler. Supported format chars** %b: bool %c: char %s: string %i: int %d: int64 %f: float/double %O: Guid </summary>
<param name="path">A format string representing the expected request path.</param>
<param name="routeHandler">A function which accepts a tuple 'T of the parsed arguments and returns a <see cref="HttpHandler" /> function which will subsequently deal with the request.</param>
<returns>A Giraffe <see cref="HttpHandler" /> function which can be composed into a bigger web application.</returns>
<summary> Serializes an object to JSON and writes the output to the body of the HTTP response. It also sets the HTTP Content-Type header to application/json and sets the Content-Length header accordingly. The JSON serializer can be configured in the ASP.NET Core startup code by registering a custom class of type <see cref="Json.ISerializer" />. </summary>
<param name="dataObj">The object to be send back to the client.</param>
<param name="ctx"></param>
<typeparam name="'T"></typeparam>
<returns>A Giraffe <see cref="HttpHandler" /> function which can be composed into a bigger web application.</returns>
<summary> Filters an incoming HTTP request based on the request path (case sensitive). </summary>
<param name="path">Request path.</param>
<param name="next"></param>
<param name="ctx"></param>
<returns>A Giraffe <see cref="HttpHandler" /> function which can be composed into a bigger web application.</returns>
<summary> Parses a JSON payload into an instance of type 'T. </summary>
<param name="f">A function which accepts an object of type 'T and returns a <see cref="HttpHandler" /> function.</param>
<param name="next"></param>
<param name="ctx"></param>
<typeparam name="'T"></typeparam>
<returns>A Giraffe <see cref="HttpHandler" /> function which can be composed into a bigger web application.</returns>
<summary> A collection of <see cref="HttpHandler" /> functions to return HTTP status code 2xx responses. </summary>
(extension) IServiceCollection.AddRouting(configureOptions: Action<AspNetCore.Routing.RouteOptions>) : IServiceCollection
(extension) HttpRequest.ReadFromJsonAsync<'TValue>(options: Text.Json.JsonSerializerOptions, ?cancellationToken: CancellationToken) : ValueTask<'TValue>
(extension) HttpRequest.ReadFromJsonAsync<'TValue>(jsonTypeInfo: Text.Json.Serialization.Metadata.JsonTypeInfo<'TValue>, ?cancellationToken: CancellationToken) : ValueTask<'TValue>
(extension) HttpRequest.ReadFromJsonAsync(jsonTypeInfo: Text.Json.Serialization.Metadata.JsonTypeInfo, ?cancellationToken: CancellationToken) : ValueTask<obj>
(extension) HttpRequest.ReadFromJsonAsync(``type`` : Type, ?cancellationToken: CancellationToken) : ValueTask<obj>
(extension) HttpRequest.ReadFromJsonAsync(``type`` : Type, options: Text.Json.JsonSerializerOptions, ?cancellationToken: CancellationToken) : ValueTask<obj>
(extension) HttpRequest.ReadFromJsonAsync(``type`` : Type, context: Text.Json.Serialization.JsonSerializerContext, ?cancellationToken: CancellationToken) : ValueTask<obj>
Orsak