在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();
}
会很方便。
答案 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();
});
}