あなたのような属性を設定するには、以下のコードを使用することができますコントローラのAPIメソッドでVisualBeanの答え
@拡張:
[SwaggerResponseContentType(responseType:"application/pdf", Exclusive=true)]
public HttpResponseMessage GetAuthorityForm(string id)
{
....
注:「真=独占」他のすべてのコンテンツの種類を削除しますが、それ以外の場合は、新しい属性を使用すると、Swagger UIドロップダウンに新しいレスポンスコンテンツタイプが追加されます。それはあなたのコントローラまたはAPIをドキュメントだけ変更することはありません。
SwaggerConfig.cs
GlobalConfiguration.Configuration
.EnableSwagger(c =>
// Set filter to apply Custom Content Types to operations
//
c.OperationFilter<ResponseContentTypeOperationFilter>();
SwaggerReponseContentTypeAttribute.cs
/// <summary>
/// SwaggerResponseContentTypeAttribute
/// </summary>
[AttributeUsage(AttributeTargets.Method)]
public sealed class SwaggerResponseContentTypeAttribute : Attribute
{
/// <summary>
/// SwaggerResponseContentTypeAttribute
/// </summary>
/// <param name="responseType"></param>
public SwaggerResponseContentTypeAttribute(string responseType)
{
ResponseType = responseType;
}
/// <summary>
/// Response Content Type
/// </summary>
public string ResponseType { get; private set; }
/// <summary>
/// Remove all other Response Content Types
/// </summary>
public bool Exclusive { get; set; }
}
ResponseContentTypeOperationFilter.cs
public class ResponseContentTypeOperationFilter : IOperationFilter
{
public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
{
var requestAttributes = apiDescription.GetControllerAndActionAttributes<SwaggerResponseContentTypeAttribute>().FirstOrDefault();
if (requestAttributes != null)
{
if (requestAttributes.Exclusive)
operation.produces.Clear();
operation.produces.Add(requestAttributes.ResponseType);
}
}
}
Web Apiの設定中にMediaTypeFormatterを登録すると、Shashbuckle 5がこれを処理する必要があります。 –
ありがとうございます。それは賢く聞こえるが、私はアクション/ルートごとにそれを望む。 –
私はあなたのwebconfigのフォーマッタとして追加する必要があると思います。これはアクション単位ではなく、グローバルです。 あなたができることは、独自のoperationsFilterを作成し、新しいフォーマットを返す操作にのみ適用することです。 – VisualBean