У меня есть конечная точка (пожалуйста, исправьте меня, если я использую неправильный термин), который принимает 3 параметра:
[System.Web.Http.HttpPost]
public HttpResponseMessage DeleteDocument(DocumentData data, string apiKey, string subjectType ="")
{
HttpResponseMessage result = null;
var httpRequest = HttpContext.Current.Request;
if (httpRequest.Files.Count < 1)
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
var certFile = httpRequest.Files["cerFile"];
byte[] certBytes;
using (var stream = new MemoryStream())
{
certFile.InputStream.CopyTo(stream);
certBytes = stream.ToArray();
}
...
}
Здесь после запроса я получаю две строки и один объектный параметр. Все работает отлично, так далеко. Но мне также нужно передать 4-й параметр - файл. Затем я прочитал:
...
var httpRequest = HttpContext.Current.Request;
if (httpRequest.Files.Count < 1)
....
Так что теперь в моем swagger-интерфейсе я должен добавить еще одно поле fileupload. Для этого я добавил FileUploadHelper
public class FileUploadHelper : IOperationFilter
{
public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
{
if (operation.operationId.Contains("ServiceAPI"))
{
operation.consumes.Add("application/form-data");
Parameter fileParam = new Parameter
{
name = "cerFile",
@in = "formData",
required = true,
type = "file",
description = "Файл сертифікату"
};
if (operation.parameters == null)
{
operation.parameters = new List<Parameter>() { fileParam };
return;
}
operation.parameters.Add(fileParam);
}
}
}
и добавил в SwaggerConfig.cs
c.OperationFilter<FileUploadHelper>();
Теперь, когда я публикую данные со всеми 4 параметрами, я могу получить только строковые параметры. Файл и Объект не связаны. Однако я могу опубликовать файл, если удаляю данные объекта DocumentData, или я могу опубликовать параметр объекта, если удаляю FileUploadHelper, но мне нужны оба варианта, что я делаю неправильно? Пожалуйста помоги.