Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 序列化之前来自自定义中间件的.Net Core访问响应_C#_Asp.net Core_.net Core - Fatal编程技术网

C# 序列化之前来自自定义中间件的.Net Core访问响应

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核

我正在开发一个定制的middlware,它将根据响应本身设置响应Http状态代码

我有一门课:

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