Giter Club home page Giter Club logo

giraffe.razor's Introduction

Giraffe

Giraffe.Razor

Razor view engine support for the Giraffe web framework.

NuGet Info

Linux, macOS and Windows Build Status

.NET Core

Build history

Table of contents

Documentation

The Giraffe.Razor NuGet package adds additional HttpHandler functions to render Razor views in Giraffe.

In order to use the Razor functionality in an (ASP.NET Core) Giraffe application you'll need to register additional dependencies through the AddRazorEngine extension method during application start-up:

open Giraffe
open Giraffe.Razor

type Startup() =
    member __.ConfigureServices (svc : IServiceCollection,
                                 env : IHostingEnvironment) =
        let viewsFolderPath =
            Path.Combine(env.ContentRootPath, "Views")
        svc.AddRazorEngine viewsFolderPath |> ignore

If your all of your Razor views are kept in a Razor class library, then you do not need to specify a views folder path when registering the Razor dependencies. In this case there is an overload of AddRazorEngine which takes no arguments:

open Giraffe
open Giraffe.Razor

type Startup() =
    member __.ConfigureServices (svc : IServiceCollection,
                                 env : IHostingEnvironment) =
        svc.AddRazorEngine() |> ignore

razorView

The razorView http handler utilises the official ASP.NET Core MVC Razor view engine to compile a view into a HTML page and sets the body of the HttpResponse object. It requires the content type, the view name, an optional view model, an optional view data dictionary, and an optional model state dictionary as input parameters.

Example:

Use the razorView function:

open Giraffe
open Giraffe.Razor

[<CLIMutable>]
type TestModel =
    {
        WelcomeText : string
    }

let model = { WelcomeText = "Hello, World" }

let app =
    choose [
        // Assuming there is a view called "Index.cshtml"
        route  "/" >=> razorView "text/html" "Index" (Some model) None None
    ]

razorHtmlView

The razorHtmlView http handler is the same as the razorView handler except that it automatically sets the response's content type to text/html; charset=utf-8.

Example:

Use the razorView function:

open Giraffe
open Giraffe.Razor
open Microsoft.AspNetCore.Mvc.ModelBinding

[<CLIMutable>]
type TestModel =
    {
        WelcomeText : string
    }

let model = { WelcomeText = "Hello, World" }

let viewData =
    dict [
        "Title", "Hello World" :> obj
        "Foo", 89 :> obj
        "Bar", true :> obj
    ]

let modelState = ModelStateDictionary()

let app =
    choose [
        // Assuming there is a view called "Index.cshtml"
        route  "/" >=> razorHtmlView "Index" (Some model) (Some viewData) (Some modelState)
    ]

validateAntiforgeryToken

The validateAntiforgeryToken http handler allows one to validate an anti forgery token created by the Microsoft.AspNetCore.Antiforgery API.

Example:

Inside a razor view add an anti forgery token:

<form action="/submit-sth">
   @Html.AntiforgeryToken
   <input type="submit">
</form>

Use the validateAntiforgeryToken function to validate the form request:

open Giraffe
open Giraffe.Razor

let invalidCSRFTokenHandler = RequestErrors.badRequest "The CSRF token was invalid"

let app =
    POST
    >=> route "/submit-sth"
    >=> validateAntiforgeryToken invalidCSRFTokenHandler
    >=> Successful.OK "All good"

Samples

Please find a fully functioning sample application under ./samples/GiraffeRazorSample/.

Nightly builds and NuGet feed

All official release packages are published to the official and public NuGet feed.

Nightly builds (builds from the develop branch) produce unofficial pre-release packages which can be pulled from the project's NuGet feed on GitHub.

These packages are being tagged with the Workflow's run number as the package version.

All other builds, such as builds triggered by pull requests produce a NuGet package which can be downloaded as an artifact from the individual GitHub action.

More information

For more information about Giraffe, how to set up a development environment, contribution guidelines and more please visit the main documentation page.

License

Apache 2.0

giraffe.razor's People

Contributors

dustinmoris avatar toburger avatar slang25 avatar lanayx avatar sasmithjr avatar nagelfar avatar joncanning avatar odytrice avatar willnationsdev avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.