私が持っているもの:
すべての非成功応答が「IApiException」を返す API があります。
public class ApiException : Exception, IApiException
{
public ExceptionType Type { get; set; }
public int ErrorCode { get; set; }
public HttpStatusCode Status { get; set; }
public string Code { get; set; }
public List<Error> Errors { get; set; } = new List<Error>();
public ApiException(ExceptionType type, Reason reason, string message, HttpStatusCode httpStatus)
{
Type = type;
Errors.Add(new Error { Message = message, Reason = reason.ToString() });
Status = httpStatus;
Code = httpStatus.ToString();
}
}
ISchemaFilter を介してスワッシュバックルに例を設定すると、すべてのモデル例に同じ例が配置されるため、401 は 429 と同じ例を返します。
私が欲しいもの:
ステータス コードに基づいてさまざまな例を返すことができるようにしたいと考えています。
私が試したこと:
応答キーを探す IOperationsFilter を作成してから、応答スキーマの例または応答の例のいずれかを設定しようとしました。しかし、それはモデルをまったく表示していません。
public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
{
foreach (var response in operation.responses)
{
if (response.Key == "401")
{
response.Value.description = "Error";
response.Value.schema.example = new
{
Type = ExceptionType.Error.ToString(),
Errors = new {Message = "Unauthorized", Reason = Reason.Unauthorized},
Status = HttpStatusCode.Unauthorized,
Code = HttpStatusCode.Unauthorized.ToString()
};
}
}
}