使用新字段扩展Web API的MvcAjaxResponse(换行结果)

时间:2018-03-27 20:04:53

标签: aspnetboilerplate

有没有办法为每个API调用的包装响应添加额外的字段?我想添加字段" databaseVersion"在我的响应包装中,如下所示:

{
  "success": true,
  "result": {
    ... 
  },
  "error": null,
  "targetUrl": null,
  "unAuthorizedRequest": false,
  "__abp": true,
  "databaseVersion" : 5.2
}

有没有一种简单的方法可以在不创建包装响应的全新逻辑的情况下做到这一点?我正在使用最新的asp.net core 2.X SPA模板。

1 个答案:

答案 0 :(得分:1)

我猜你使用的是旧版本的ABP。因为我在当前版本中没有看到MvcAjaxResponse。

为了给你提供一些线索,有多个ajax响应,但它们都实现了IAbpActionResultWrapper。如果您实现自己的IAbpActionResultWrapper,则可以添加自定义属性。

public class AbpJsonActionResultWrapper : IAbpActionResultWrapper
{
    public void Wrap(ResultExecutingContext actionResult)
    {
        var jsonResult = actionResult.Result as JsonResult;
        if (jsonResult == null)
        {
            throw new ArgumentException($"{nameof(actionResult)} should be JsonResult!");
        }

        if (!(jsonResult.Value is AjaxResponseBase))
        {
            jsonResult.Value = new AjaxResponse(jsonResult.Value);
        }
    }
}

请参阅AbpActionResultWrapperFactory,它是创建具体对象的位置。

public IAbpActionResultWrapper CreateFor(ResultExecutingContext actionResult)
{
    Check.NotNull(actionResult, nameof(actionResult));

    if (actionResult.Result is ObjectResult)
    {
        return new AbpObjectActionResultWrapper(actionResult.HttpContext.RequestServices);
    }

    if (actionResult.Result is JsonResult)
    {
        return new AbpJsonActionResultWrapper();
    }

    if (actionResult.Result is EmptyResult)
    {
        return new AbpEmptyActionResultWrapper();
    }

    return new NullAbpActionResultWrapper();
}
相关问题