.net - ASP.NET Core 1.0 F#项目

标签 .net f# asp.net-core

有人可以分享用F#编写的最低工作ASP.NET Core应用程序项目吗?

要在C#中实现最小演示,我们必须执行以下操作:

mkdir aspnetcoreapp
cd aspnetcoreapp
dotnet new

然后编辑project.json:
{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable",
    "emitEntryPoint": true
  },
  "dependencies": {},
  "frameworks": {
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0"
        },
        "Microsoft.AspNetCore.Server.Kestrel": "1.0.0"
      },
      "imports": "dnxcore50"
    }
  }
}

然后执行dotnet restore并使用以下代码:
Startup.cs:
using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;

namespace aspnetcoreapp
{
    public class Startup
    {
        public void Configure(IApplicationBuilder app)
        {
            app.Run(context =>
            {
                return context.Response.WriteAsync("Hello from ASP.NET Core!");
            });
        }
    }
}
Program.cs:
using System;
using Microsoft.AspNetCore.Hosting;

namespace aspnetcoreapp
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                .UseStartup<Startup>()
                .Build();

            host.Run();
        }
    }
}

然后执行dotnet run。有人可以提示我如何在F#中执行相同的操作吗?

最佳答案

我最近一直在探索新的.net核心,并且遇到了同样的问题。实际上,这样做很容易。

将F#运行时引用添加到project.json中:

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true,
    "compilerName": "fsc",
    "compile": "**/*.fs"
  },
  "dependencies": {
    "Microsoft.FSharp.Core.netcore": "1.0.0-alpha-160509",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0"
  },
  "tools": {
    "dotnet-compile-fsc": {
      "version": "1.0.0-preview2-*",
      "imports": [
        "dnxcore50",
        "portable-net45+win81",
        "netstandard1.3"
      ]
    }
  },
  "frameworks": {
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0"
        }
      },
      "imports": [
        "portable-net45+win8",
        "dnxcore50"
      ]
    }
  }
}

然后将以下代码放入Program.fs中:
open System
open Microsoft.AspNetCore.Hosting
open Microsoft.AspNetCore.Builder
open Microsoft.AspNetCore.Hosting
open Microsoft.AspNetCore.Http


type Startup() = 
    member this.Configure(app: IApplicationBuilder) =
      app.Run(fun context -> context.Response.WriteAsync("Hello from ASP.NET Core!"))


[<EntryPoint>]
let main argv = 
    let host = WebHostBuilder().UseKestrel().UseStartup<Startup>().Build()
    host.Run()
    printfn "Server finished!"
    0

顺便说一句,定义Startup类(像type Startup()而不是type Startup)非常重要。否则,Kestrel运行时将在启动期间崩溃。

关于.net - ASP.NET Core 1.0 F#项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38275408/

相关文章:

.net - GC.GetTotalMemory(false) 和 GC.GetTotalMemory(true) 有什么区别

c# - WPF 程序在静默运行时无法正常运行

c# - 从我的 .Net 应用程序使用 AppFabric DashBoard

function - 这个 '()' 表示法是什么意思?

c# - ASP.NET Core在提交表单时排除viewmodel的属性

c# - 日志记录逻辑应该位于 DDD 解决方案中的什么位置?

.net - 使用 C# 和 VB 以外的语言的 T4

F# 在 map 中查找集合

asp.net-web-api - ASP.net 5 中的 IApplicationBuilder.UseJwtBearerAuthentication 扩展在哪里?

c# - 在.Net core Web API中使用Xunit - 如何测试/通过500状态代码