C# 序列化之前来自自定义中间件的.Net Core访问响应
我正在开发一个定制的middlware,它将根据响应本身设置响应Http状态代码 我有一门课:C# 序列化之前来自自定义中间件的.Net Core访问响应,c#,asp.net-core,.net-core,C#,Asp.net Core,.net Core,我正在开发一个定制的middlware,它将根据响应本身设置响应Http状态代码 我有一门课: public class Response<T> { public T Data { get; set; } public IEnumerable<CustomError> Errors { get; set; } } 公共类响应 { 公共T数据{get;set;} 公共IEnumerable错误{get;set;} } 这是由我的.Net核
public class Response<T>
{
public T Data { get; set; }
public IEnumerable<CustomError> Errors { get; set; }
}
公共类响应
{
公共T数据{get;set;}
公共IEnumerable错误{get;set;}
}
这是由我的.Net核心API中的每个控制器返回的
我想创建一个自定义中间件,它将在从控制器返回响应后访问该响应,并根据Errors
字段在响应中分配正确的Http状态代码
我可以看到一些访问HttpContext
的Response.Body
字段的解决方案,但它将提供一个序列化字符串,我必须再次反序列化该字符串,并在循环中运行
在.NETCore中可能吗
致以最良好的祝愿,
Marcin您可以创建一个
ActionFilter
,而不是中间件,特别是您自己的实现IAsyncResultFilter
。在MVC上下文中转换到Response
将比在中间件中更容易,因为您可以访问那里的ObjectResult
它可能看起来像这样
public class Response
{
public IEnumerable<string> Errors { get; set; }
}
public class Response<T> : Response
{
public T Data { get; set; }
}
此示例根据存在的“SomeError”
设置状态代码。不涉及序列化/反序列化,只涉及强制转换
services.AddControllers(o =>
{
o.Filters.Add(typeof(ErrorResultFilter));
});
这样,我在
startup.cs
中注册了我的过滤器,您可以创建一个ActionFilter
,特别是您自己的实现IAsyncResultFilter
。在MVC上下文中转换到Response
将比在中间件中更容易,因为您可以访问那里的ObjectResult
它可能看起来像这样
public class Response
{
public IEnumerable<string> Errors { get; set; }
}
public class Response<T> : Response
{
public T Data { get; set; }
}
此示例根据存在的“SomeError”
设置状态代码。不涉及序列化/反序列化,只涉及强制转换
services.AddControllers(o =>
{
o.Filters.Add(typeof(ErrorResultFilter));
});
这样,我在startup.cs