如何使用Azure OpenApi处理复杂的响应示例



给出这个场景。。。

[OpenApiResponseWithBody(statusCode: HttpStatusCode.OK, 
contentType: "application/json", bodyType: typeof(string), 
Summary = "The Response", Description = "This returns the response")]

这是基于文档的经典示例。

现在,检查这个模型:

internal class Country
{
public string Iso3166 { get; set; }
public string Description { get; set; }
public bool IsActive { get; set; }
}

如果我想返回一系列国家,我应该提供这样的东西。。。

[OpenApiResponseWithBody(statusCode: HttpStatusCode.OK, 
contentType: "application/json", bodyType: typeof(Country[]), 
Summary = "The Response", Description = "This returns the response")]

好的,到目前为止,很好。。。。

但现实的场景总是像这个物体一样的反应。。。

internal class Response
{
public bool Successfully { get; set; }
public int Count { get; set; }
public string ErrorMsg { get; set; }
public int ErrorCode { get; set; }
public dynamic Data { get; set; }
}

国家列表将是Data属性的子项。。。。因此,在我的代码中,这表现为:

var results = new List<Country>();
Response res = new Response()
{
Successfully = true,
Count = results.Count,
Data = results
};
return new OkObjectResult(res);

我需要通知OpenApi,响应应该是响应类型的对象,并且在Data属性中,始终是国家的数组。如何存档?

更改此项:

Response res = new Response()
{
Successfully = true,
Count = results.Count,
Data = results
};
return new OkObjectResult(res);

为此:

var response = req.CreateResponse();
response.StatusCode = System.Net.HttpStatusCode.OK;
await response.WriteAsJsonAsync(results);
return response;

结果可以用于任何对象或列表。

如果你需要添加一些标题,你可以做:

response.Headers.Add("Request-Warning", parameters.paging.Message);

记住返回:

public async Task<HttpResponseData> ...functionName

最新更新