Kho*_*hon 5 c# asp.net-core asp.net-core-webapi
using Microsoft.AspNetCore.Http;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
namespace DemoReact
{
public class Middlewarecustom
{
private readonly RequestDelegate _next;
public Middlewarecustom(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context) {
using (var buffer = new MemoryStream()) {
var stream = context.Response.Body;
context.Response.Body = buffer;
await _next.Invoke(context);
buffer.Seek(0, SeekOrigin.Begin);
var reader = new StreamReader(buffer);
using (var bufferReader = new StreamReader(buffer)) {
string body = await bufferReader.ReadToEndAsync();
WeatherForecast wf = new WeatherForecast();
wf.Date = DateTime.Now;
wf.Summary = "demo";
wf.TemperatureC = 31;
var jsonString = JsonConvert.SerializeObject(wf);
byte[] bytess = Encoding.ASCII.GetBytes(jsonString);
var data = new MemoryStream(bytess);
context.Response.Body = data;
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我创建了自定义中间件 asp.net core 来修改响应正文,但在
context.Response.Body = data;之后客户端的响应为空白;似乎对此没有任何帮助表示赞赏
Kar*_*ran 14
尝试像下面的代码它可能会工作。我评论了 3 行,并在下面添加了几行。我陷入了类似的境地,我已经通过不同参考文献的多个答案解决了这个问题。就像下面的链接一样。
public async Task Invoke(HttpContext context) {
using (var buffer = new MemoryStream()) {
var stream = context.Response.Body;
context.Response.Body = buffer;
await _next.Invoke(context);
buffer.Seek(0, SeekOrigin.Begin);
var reader = new StreamReader(buffer);
using (var bufferReader = new StreamReader(buffer)) {
string body = await bufferReader.ReadToEndAsync();
WeatherForecast wf = new WeatherForecast();
wf.Date = DateTime.Now;
wf.Summary = "demo";
wf.TemperatureC = 31;
var jsonString = JsonConvert.SerializeObject(wf);
// Commented below lines.
// byte[] bytess = Encoding.ASCII.GetBytes(jsonString);
// var data = new MemoryStream(bytess);
// context.Response.Body = data;
// Added new code
await context.Response.WriteAsync(jsonString);
context.Response.Body.Seek(0, SeekOrigin.Begin);
// below code is not working with .Net 6 and it requires CopyToAsync.
//context.Response.Body.CopyTo(stream);
await context.Response.Body.CopyToAsync(stream); //it prevents it must be async, if it isn't there is an exception in .Net 6.
context.Response.Body = stream;
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1193 次 |
最近记录: |