【F# + ASP.NET MVC】 物理ファイルをリクエストした場合でも、ルーティングで処理するには

◆ Global.fs

namespace Sample

open System
open System.Web
open System.Web.Mvc
open System.Web.Routing

type Route = { controller : string
               action : string
               id : UrlParameter }

type Global() =
    inherit System.Web.HttpApplication()
    static member RegisterRoutes(routes:RouteCollection) =
        // 物理ファイルをリクエストした場合でもルーティングで処理する
        routes.RouteExistingFiles <- true                
        // CSSファイルをマッピングする
        routes.MapRoute("Stylesheet", 
                        "Content/{file}.css", 
                        { controller = "Content"; action = "Index"
                          id = UrlParameter.Optional } ) |> ignore

        routes.MapRoute("Default", 
                        "{controller}/{action}/{id}", 
                        { controller = "Home"; action = "Index"
                          id = UrlParameter.Optional } )

    member this.Start() =
        AreaRegistration.RegisterAllAreas()
        Global.RegisterRoutes(RouteTable.Routes)

◆ Controller(CSSファイル用)

namespace Sample.Controllers

open System.Web
open System.Web.Mvc
open System.IO

type ContentController() =
    inherit Controller()
    member this.Index (file) =
        let path = this.Server.MapPath("~/Content/" + file + ".css");        
        // "背景色をピンクに変更
        let content = File.ReadAllText(path).Replace(
                        "background-color: #fff;", "background-color: pink;")
        
        this.Content(content, "text/css")

◆ Controller

namespace Sample.Controllers

open System.Web
open System.Web.Mvc

type HomeController() =
    inherit Controller()
    member this.Index () =
        this.View() :> ActionResult

◆ View

@{ Layout = null; }

<!DOCTYPE html>
<html>
<head>
    <title>Index</title>
    <link href="@Url.Content("~/Content/Site.css")" 
        rel="stylesheet" type="text/css" />    
</head>
<body>
    <div>
        F# + ASP.NET MVC = Cool!
    </div>
</body>
</html>

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中