Comments (7)
Hey, I will get back to you with an example over the weekend and include it into the current sample app! That is a good question, thanks for asking!
from giraffe.
Modelbinding appears to be to tightly coupled to Mvc, aspnet/Mvc#6109.
Parsing the raw request to string (json) and converting the json to the model seems like an option.
Question is do we want other ways of extracting the model from the request? Would it make sense to have our own modelbinding?
from giraffe.
I'm able to get the json from the request
let readAllBytes (s : Stream) =
let ms = new MemoryStream()
s.CopyTo(ms)
ms.ToArray()
// ...
POST >=>
choose [
route "/contact" >=> (fun (ctx: HttpHandlerContext) ->
async {
let model =
ctx.HttpContext.Request.Body
|> readAllBytes
|> Encoding.UTF8.GetString
|> JsonConvert.DeserializeObject
sprintf "Received model %s" (model.ToString())
|> Console.WriteLine
let json = JsonConvert.SerializeObject(model)
return! ctx |> (sprintf "Received %s" json |> text)
}
)
]
Might be a good idea to provide some things out of the box for this.
from giraffe.
Agreed. It would be nice if there would be a function similar like let model = bindModel<Person> ctx
.
I would expect that this function would also inspect the requests' Content-Type
and at least support the deserialization of a JSON, XML or URL encoded object by default with a facility for users to extend if they have some custom binding requriements.
from giraffe.
Perhaps the return type of bindModel
should be Result<'TOk, 'TError
>.
See https://gist.github.com/nojaf/cf176f304a7843bbf15e6a3b3d9dc9f2
from giraffe.
Just published Giraffe.ModelBinding
this morning.
Have a look if the updated documentation makes sense and if you can think of any improvements?
I think an additional bindQueryString
function would be useful which can bind a model from query string parameters, but I didn't have time to add this one as well now.
from giraffe.
Great work, simple and clean. This is a good starting point and I would create separate issues for missing functionality. F.ex. complex type properties with the form data or a combination of form data and querystring, etc.
from giraffe.
Related Issues (20)
- Migrate to System.Text.Json HOT 1
- Participate on hacktoberfest 2023? HOT 1
- Never decalre reader with `use` on `ctx.Request.Body` HOT 4
- Upgrade to .NET 8 HOT 6
- LinkGenerator doesn't work with routef HOT 1
- Giraffe 6.2 is breaks against Microsoft.IO.RecyclableMemoryStream 3.0.0 HOT 11
- Returning streams, either with WriteStreamAsync or WriteFileStreamAsync or their handler equivalents, is extremely slow HOT 4
- Question: How to approach outside in testing of a micro service? HOT 2
- Guid pattern in endpoint router matches invalid values, throws System.FormatException HOT 6
- Follow-up from "Minor code optimisation #567"
- Update SECURITY.md
- Start using fantomas to validate code submissions with CI HOT 6
- [README] Suggestion for "Getting Started"'s "Doing it manually" HOT 2
- [question] Would it be possible to make `Giraffe.EndpointRouting` case-sensitive? HOT 3
- Remove NuGet API key from the repository HOT 3
- 6.4.0 release references PR for updating to .NET 7 instead of .NET 8 HOT 1
- EndpointRouting - Create endpoint for multiple http verbs
- Request/discussion: WriteStreamAsync buffer size autotuning and/or increase default buffer size HOT 1
- Update `.vscode` debug configuration to point to existent projects
- Returning 406 when mustAccept fails HOT 8
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 giraffe.