如何更改ASP.NET Core 2.2中的api返回结果?

时间:2019-01-15 10:08:04

标签: asp.net-core asp.net-core-2.2

我的要求是,当操作的返回类型为void或Task时,我想返回自定义ApiResult。我尝试了中间件机制,但是观察到的响应对于ContentLength和ContentType都为null,而我想要的是ApiResult空实例的json表示形式。 那我应该在哪里进行转换?

2 个答案:

答案 0 :(得分:1)

.net核心中有多个过滤器,您可以尝试Result filters

对于voidTask,它将在EmptyResult中返回OnResultExecutionAsync

尝试像

那样实现自己的ResultFilter
public class ResponseFilter : IAsyncResultFilter
{
    public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
    {
        // do something before the action executes
        if (context.Result is EmptyResult)
        {
            context.Result = new JsonResult(new ApiResult());
        }
        var resultContext = await next();
        // do something after the action executes; resultContext.Result will be set
    }
}
public class ApiResult
{
    public int Code { get; set; }
    public object Result { get; set; }
}

并在Startup.cs

中注册
services.AddScoped<ResponseFilter>();
services.AddMvc(c =>
                {                       
                    c.Filters.Add(typeof(ResponseFilter));
                }).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

答案 1 :(得分:0)

您要做的就是检查返回类型,并在返回的基础上执行所需的任何操作。

这是抽象的演示: 您有一个方法:

 public Action SomeActionMethod()
    {
        var obj = new object();
        return (Action)obj;
    }

现在在您的代码中,您可以使用以下代码获取方法的名称:

 MethodBase b = p.GetType().GetMethods().FirstOrDefault();
        var methodName = ((b as MethodInfo).ReturnType.Name);

上面代码中的p是包含要知道其返回类型的方法的类。

获得方法名后,您可以确定变量methodName的返回值。

希望有帮助。

相关问题