以下代码是错误处理中间件的一部分,其目标是即使抛出错误也为客户端提供一致的格式。
Accept
当标头设置为时,我尝试将响应序列化为 XML application/xml
,否则返回 JSON。
if (context.Request.Headers["Accept"] == "application/xml")
{
context.Response.ContentType = "application/xml";
using (var stringwriter = new StringWriter())
{
var serializer = new XmlSerializer(response.GetType());
serializer.Serialize(stringwriter, response);
await context.Response.WriteAsync(stringwriter.ToString());
}
}
else {
context.Response.ContentType = "application/json";
var json = JsonConvert.SerializeObject(response);
await context.Response.WriteAsync(json);
}
该else块按预期工作。如果我在声明的行上设置断点XmlSerializer,执行就会停止。如果我在下一行设置断点,则永远不会命中断点;响应已发送给客户端。
我的中间件配置如下:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseStatusCodePagesWithReExecute("/error/{0}");
app.UseExceptionHandler("/error/500");
app.UseHsts();
app.UseMiddleware<ErrorWrappingMiddleware>();
app.UseMvc();
}
context.Response.WriteAsync(stringwriter.ToString());为什么在块中调用之前就将响应返回给客户端if?
慕田峪9158850
相关分类