У меня есть контроллер с несколькими методами получения, которые выдают application/vnd.api+json
и application/json
. У меня есть один метод исправления, который поддерживает application/json-patch+json
.
Чтобы избежать повторяющихся атрибутов метода get, у меня есть [Produces]
на уровне класса
[Produces("application/json", "application/vnd.api+json")]
public class ValuesController : Controller
{ ... }
Это хорошо, но, глядя на страницу документации Swagger UI, которая генерируется, патч говорит, что поддерживает все 3 типа мультимедиа, описанные выше, что неправильно.
Итак, я хочу удалить два метода, которые применяются к методу исправления. Я попытался создать противоположность [Produces]
.
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class DoesNotProduceAttribute : Attribute, IApiDefaultResponseMetadataProvider, IOrderedFilter
{
public DoesNotProduceAttribute(string contentTypeToRemove, params string[] otherContentTypesToRemove)
{
ContentTypes.Add(contentTypeToRemove);
otherContentTypesToRemove.ForEach(ContentTypes.Add);
}
public void SetContentTypes(MediaTypeCollection contentTypes)
{
foreach (var contentType in ContentTypes)
contentTypes.Remove(contentType);
}
public MediaTypeCollection ContentTypes { get; } = new MediaTypeCollection();
...
}
и примените это к моему методу
[HttpPatch("{id}")]
[DoesNotProduce("application/json", "application/vnd.api+json")]
public async Task<IActionResult> Update(string id, [FromBody]JsonPatchDocument<Value> patchDocument)
{ ... }
Однако метод SetContentTypes()
не вызывается. Что мне не хватает? Есть ли другой способ удаления типов содержимого, которые я не хочу использовать для метода исправлений?