Comments (3)
I just rolled out a fix for this. Huge shoutout to @mlaily for the discovery.
from falco.
@sheridanchris I noticed this same behavior when doing async/Task work with Request.mapForm in v4.0.
You can see in this discussion how I had to adopt a different approach (lower-level) to compose my async work with the APIs Falco provides.
Here's two approaches I ended up trying that both work.
Approach 1 - Request.mapFormAsync
let post: HttpHandler =
Services.inject<ShopContext> (fun db ->
let mapAsync = fun (form: FormCollectionReader) ->
form.TryGetGuid "id"
|> BasketDomain.updateBasket db 1
|> Async.StartAsTask
Request.mapFormAsync mapAsync (fun quantity ->
match quantity with
| None -> Response.redirectPermanently "/basket?error=notfound"
| Some q -> Response.redirectPermanently $"/basket?added={q}"))
where Request.mapFormAsync
was something I added:
module Request =
open System.Threading.Tasks
open Microsoft.AspNetCore.Http
open Falco
let mapFormAsync
(mapAsync : FormCollectionReader -> Task<'T>)
(next : 'T -> HttpHandler) =
fun (ctx: HttpContext) -> (task {
let! form = Request.getForm ctx
let! res = mapAsync form
return! next res ctx
}:> Task)
Approach 2 - Request.getForm
let postAlternate: HttpHandler =
Services.inject<ShopContext> (fun db -> fun ctx ->
task {
let! form = Request.getForm ctx
let productId = form.TryGetGuid "id"
let! quantity = BasketDomain.updateBasket db 1 productId |> Async.StartAsTask
return!
match quantity with
| Some q -> Response.redirectPermanently $"/basket?added={q}" ctx
| None -> Response.redirectPermanently "/basket?error=notfound" ctx
})
from falco.
@seangwright Thank you for the suggestions. I'll make sure to try this out ASAP.
from falco.
Related Issues (20)
- Docs: minor error in Falco.Markup docs
- Docs: minor error with Routing HOT 3
- Request: Update Tags/Releases feature for repository HOT 4
- falcoframework.com is down HOT 1
- Add CORS support to HostBuilder HOT 2
- Question: Elem.button - onClick? HOT 3
- Broken Link & Spelling for "function composition" HOT 1
- Unable to serialize DtResponse object.
- Errors in Tutorial? HOT 6
- Add dapper HOT 1
- Attr.cols missing from Markup module HOT 1
- Enable the `Discussions` page HOT 1
- MapJson doesn't work HOT 2
- Recommendation for a basic Dockerfile to build Falco - deploy on Fly HOT 3
- [Question] Response.debugRequest is not defined HOT 2
- dead link HOT 6
- Typo HOT 3
- Question: XSS vs CSRF HOT 1
- Docs: re-direct examples out of date HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from falco.