小编ali*_*if3的帖子

写入 HttpResponse 时标头为只读异常

我有一个看起来像这样的控制器

IHttpWrite httpWrite;

[HttpPost]
public async Task<HttpResponse> Post(Request req)
{
    return await httpWrite.Write(req, Response);
}
Run Code Online (Sandbox Code Playgroud)

这就是所谓的

public async Task<HttpResponse> Write(object data, HttpResponse httpResponse)
{
    var json = JsonConvert.SerializeObject(data);

    httpResponse.OnStarting(() =>
    {
        httpResponse.Clear();
        httpResponse.ContentType = "application/json";
        return Task.CompletedTask;
    });

    await httpResponse.WriteAsync(json);
    return httpResponse;
}
Run Code Online (Sandbox Code Playgroud)

但是调用它会得到这个异常

System.InvalidOperationException: Headers are read-only, response has already started.
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpHeaders.ThrowHeadersReadOnlyException()
Run Code Online (Sandbox Code Playgroud)

我知道一旦数据写入响应就无法设置标头,但就我而言,我在向 HttpResponse 写入任何内容之前设置标头。

根据我所做的调试,标头的异常仅在控制器返回 HttpResponse 后才会抛出。这向我表明尝试更改标头是在我的代码之外的某些内容上进行的。

我正在使用 Visual Studio 设置的大部分样板代码。这是默认程序

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
               .UseStartup<Startup>();
Run Code Online (Sandbox Code Playgroud)

这是调用大多数默认启动

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{ …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc .net-core

6
推荐指数
1
解决办法
2万
查看次数

标签 统计

.net-core ×1

asp.net-mvc ×1

c# ×1