猿问

ASP.NET Core 在 Web API 中处理自定义响应/输出格式的方法

我想创建自定义 JSON 格式,它将响应包装在数据中并返回 Content-Type 之类的


vnd.myapi+json


目前我已经创建了一个像我在控制器中返回的包装类,但如果可以在后台处理它会更好:


public class ApiResult<TValue>

{

    [JsonProperty("data")]

    public TValue Value { get; set; }


    [JsonExtensionData]

    public Dictionary<string, object> Metadata { get; } = new Dictionary<string, object>();


    public ApiResult(TValue value)

    {

        Value = value;

    }

}


[HttpGet("{id}")]

public async Task<ActionResult<ApiResult<Bike>>> GetByIdAsync(int id)

{

    var bike = _dbContext.Bikes.AsNoTracking().SingleOrDefault(e => e.Id == id);

    if (bike == null)

    {

        return NotFound();

    }

    return new ApiResult(bike);

}


public static class ApiResultExtensions

{

    public static ApiResult<T> AddMetadata<T>(this ApiResult<T> result, string key, object value)

    {

        result.Metadata[key] = value;

        return result;

    }

}

我想返回如下响应:


{

    "data": { ... },

    "pagination": { ... },

    "someothermetadata": { ... }

}

但是分页必须以某种方式添加到我的控制器操作中的元数据中,当然这里有一些关于内容协商的文章:https : //docs.microsoft.com/en-us/aspnet/core/web-api/advanced /formatting?view=aspnetcore-2.1但我仍然想确定我在正确的轨道上。


如果这将使用我的自定义格式化程序在引擎盖下处理,那么我将如何向其添加分页之类的元数据,而不是在“数据”之外而不是在其中?


当有一个自定义格式化程序时,我仍然希望有一些方法可以从我的控制器或通过某种机制向它添加元数据,以便格式可以扩展。


上述方法的一个优点或缺点是它适用于所有序列化程序 xml、json、yaml 等。通过使用自定义格式化程序,它可能仅适用于 json,我将需要创建几个不同的格式化程序来支持我使用的所有格式想。


幕布斯6054654
浏览 313回答 1
1回答
随时随地看视频慕课网APP
我要回答