在中间件中返回状态码304

7
我将尝试为我的ASP.Net Core应用程序编写中间件,以便在文件被访问时返回304未修改的状态码。我会设置HTTP状态码并发送响应如下:
context.Response.StatusCode = 304;
await context.Response.WriteAsync("Not Modified");

但我遇到了这个异常:

System.InvalidOperationException发生了 HResult=-2146233079
Message=Write to non-body 304 response.
Source=Microsoft.AspNetCore.Server.Kestrel StackTrace: at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame.HandleNonBodyResponseWrite() at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame.d__183.MoveNext() --- 在抛出异常的前一个位置结束堆栈跟踪 --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.GetResult() at Adapt.REST.ServeStaticFilesMiddleware.d__8.MoveNext() in C:\AdaptSource\Xivic\Adapt.Services\ServeStaticFilesMiddleware.cs:第113行 InnerException:

很明显,我不能使用WriteAsync或SendFileAsync,因为它们都发送包含正文的响应。

如何在不带正文的情况下向客户端发送304?


如果您使用空字符串调用WriteAsync,则不会显示错误:await context.Response.WriteAsync(""); - Andrius
1个回答

11

仅仅设定状态码后什么也不做,就能产生预期的功能。

context.Response.StatusCode = 304;
return;

谢谢回复:)它帮助我解决了这个问题。 - santosh kumar patro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接