什么是ExpressJS for C#/ ASP.NET Core?

时间:2018-11-17 21:43:13

标签: c# asp.net-core

在ExpressJs中,您可以快速设置Web服务器并使其监听请求,并在线注册处理程序。

    var express = require('express')
    var app = express()

    // respond with "hello world" when a GET request is made to the homepage
    app.get('/', function (req, res) {
        res.send('hello world')
    })

是否可以在ASP.NET Core中使用中间件使用类似的方法做到这一点?

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.Get("/api/v2/", () =>
        {
            return "Hello world";
        });


        //configure more services...
    }

能够在同一过程中启动多个Web侦听器也很方便:

using (var server = new WebServer(url))
{
    server.Get("/path", () => { return "Hello world" });
    server.Get("/path2", () => { return "Hello world2" });
    server.RunAsync();
}

会很方便。

2 个答案:

答案 0 :(得分:3)

您可以使用类似这样的东西。虽然不是Express中的1-liner,但实际上可以将1条街区中的同一路线的不同方法分组在一起。

app.Map("/test", (builder) =>
        {
            builder.MapWhen(context => context.Request.Method == "GET", (app2) =>
            {
                app2.Run(async ctx =>
                {
                    await ctx.Response.WriteAsync("I have been reached.");
                });
            });
        });

答案 1 :(得分:1)

我试图创建一个项目,该项目允许.NET Core中的node.js确切语法出现,我意识到它们各自的语法适用于各自的环境。我建议您研究一下.NET Core的Web API设置,在其中可以检查如何在利用框架组件的同时拥有终结点。

但是,要使用第二段中显示的确切代码示例,您需要在项目中定义一个此类:

public static class AppExtensions
{

    public static IApplicationBuilder Get(this IApplicationBuilder app,
                                            string path, Func<string> run) 
        => app.Use(async (context, next) =>
            {
                if (context.Request.Path == path)
                    await context.Response.WriteAsync(run());
                else await next();
            });

}