gpt4 book ai didi

asp.net-core - View 和静态文件的 Asp.Net Core 问题 (F#)

转载 作者:行者123 更新时间:2023-12-03 21:43:35 34 4
gpt4 key购买 nike

我一直在尝试用 F# 创建一个非常简单的 MVC 项目。
这是对我所做的事情的简要说明,我将不胜感激。

  • 我使用 VS 2019 模板为 F# 创建了一个新的“ASP .NET Core Web 应用程序”。
  • 然后我选择了“ASP.NET Core Empty”,ASP.NET Core 5.0。
  • 我在项目中添加了一些文件,以使结构如下所示:
  • / Root
    | appsettings.json
    | Views
    | Home
    | Index.cshtml // added as "Content", "Do not copy"
    HomeController.fs
    Startup.fs
    Program.fs
    Controller 非常简单:
    type HomeController() =
    inherit Controller()

    this.Index() =
    this.View()
    然后,当我启动我的应用程序时,出现错误:
    InvalidOperationException: The view 'Index' was not found. The following locations were searched:
    /Views/Home/Index.cshtml
    /Views/Shared/Index.cshtml
    所以即使我的 cshtml 文件在那里,它也不能被运行时找到。
    我确保在 Startup 类中启用了“UseStaticFiles”:
    type Startup() =
    member __.ConfigureServices(services) : unit =
    services.AddControllersWithViews() |> ignore

    member __.Configure(app, env) : unit =
    // env.ContentRootFileProvider.Root is set to my Root folder
    app.UseStaticFiles() |> ignore
    app.UseRouting() |> ignore
    app.UseAuthorization() |> ignore
    app.UseEndpoints(fun endpoints ->
    endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}") |> ignore
    ) |> ignore
    走得更远
    我尝试解决问题并手动读取 cshtml 的内容并将其作为字符串返回
    type HomeController() =
    inherit Controller()

    member this.ManualIndex() =
    let html = System.IO.File.ReadAllText("/Views/Index.cshtml")
    this.Content(html, "text/html")
    它起作用了,但是从 HTML 中我仍然无法引用任何其他静态文件,例如 css 或 js。我也尝试创建 wwwroot 目录并将我的静态内容放在那里,但也没有帮助。

    最佳答案

    事实证明,MVC 项目的 F# 版本与其对应的 C# 项目略有不同,而我认为这只是语法问题。
    为了让 Razor 在 F# 项目中工作,需要一个额外的 NuGet 包:Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation。然后在 Startup 类中需要一个扩展(AddRazorRuntimeCompilation):

        member this.ConfigureServices(services: IServiceCollection) =
    services.AddControllersWithViews().AddRazorRuntimeCompilation() |> ignore
    services.AddRazorPages() |> ignore
    我没有深入研究它,但我想这与 C#-F# 互操作有关。 razor 的文件扩展名 (cshtml) 表明它依赖于 C#。尝试从 F# 项目中使用它时可能会有一些摩擦。
    展望 future ,我建议使用 dotnet 模板创建 F# MVC 项目。可以使用以下命令创建我需要的那个:
    dotnet new mvc --language=F#

    关于asp.net-core - View 和静态文件的 Asp.Net Core 问题 (F#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65943337/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com