【发布时间】:2020-04-27 21:45:13
【问题描述】:
.NET Core 3.1 中是否有更高效的方式写入响应正文?
我知道 Endpoint 的 RequestDelegate 必须是一个 Task,因为它将由 .NET 管道作为线程启动,但使用 await 重复调用 WriteAsync 似乎过于冗长且效率低下。
下面是我想要完成的一些示例代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace Flux
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", DefaultRequest);
});
}
public async Task DefaultRequest(HttpContext context)
{
await context.Response.WriteAsync("<html>");
await context.Response.WriteAsync("<head>");
await context.Response.WriteAsync("<title>Hello World!</title>");
await context.Response.WriteAsync("</head>");
await context.Response.WriteAsync("<body>");
await context.Response.WriteAsync("Hello World!");
await context.Response.WriteAsync("</body>");
await context.Response.WriteAsync("</html>");
}
}
}
【问题讨论】:
-
你能用
StringBuilder之类的东西建立字符串,然后打电话给WriteAsync吗? -
我可以,但更多的是了解是否有更好的方式与响应主体交互。例如,我知道有
BodyWriter属性,但我不确定这是否比WriteAsync更有效。 -
Alexander,这正是我要寻找的信息。谢谢!
标签: c# asp.net-core asp.net-core-3.1 c#-8.0