У меня были некоторые проблемы с отображением моего ответа API в формате xml в swagger, наконец-то я получил его для отображения в правильном формате application / xml с моим первым действием, приведенным ниже, но он по-прежнему говорит, что я могу отобразить его только как application / json,
Я пытался удалить application / json из атрибута Produces, но по-прежнему показывает только application / json.
Есть идеи, почему он так себя ведет?
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().AddMvcOptions(o => o.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter()));
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
c.RoutePrefix = "";
});
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });
c.AddSecurityDefinition("Bearer", new ApiKeyScheme { In = "header", Description = "Please enter JWT with Bearer into field", Name = "Authorization", Type = "apiKey" });
c.AddSecurityRequirement(new Dictionary<string, IEnumerable<string>> {
{ "Bearer", Enumerable.Empty<string>() },
});
});
}
И действие:
[Produces("application/json", "application/xml")]
public ContentResult GetByAddress(string address)
{
var addressId = GetAddressIdByAddress(address);
string result = _soapApi.GetResultById(addressId);
return Content(result, "application/xml", Encoding.UTF8);
}
Тот же результат с:
[Produces("application/json", "application/xml")]
public IActionResult GetByAddress(string address)
{
var addressId = GetAddressIdByAddress(address);
string result = _soapApi.GetResultById(addressId);
return Content(result, "application/xml", Encoding.UTF8);
}
Результатыв:
При нажатии на кнопку Excute я получаю результат в правильном формате XML.
При этом:
[Produces("application/json", "application/xml")]
public string GetByAddress(string address)
{
var addressId = GetAddressIdByAddress(address);
string result = _soapApi.GetResultById(addressId);
return result;
}
Или это:
[Produces("application/json", "application/xml")]
public List<Address> GetByAddreses()
{
string result = _soapApi.GetResults();
return result;
}
Результаты:
Я не могу вернуть список проанализированных объектов из-за различныхструктура данных возвращается для разных параметров.Таким образом, на данный момент я получаю только необработанные XML-данные мыла и должен анализировать / десериализовать их.Но для того, чтобы на самом деле видеть необработанный ответ, мне также нужно показать его как Content from string с application-type application / xml.И это дает мне хороший вывод вроде (хотя он все еще говорит, что возможно только application / json):
Подводя итог:
У меня не получилось работать с типом содержимого ответа, показывающим правильный тип содержимого (в фильтре "Тип содержимого ответа"), когда строка была проанализирована в ее фактическом формате, как показано ниже.Даже при том, что это приводит к правильному выводу для application / xml, который был самым важным (см. Скриншот выше);
[Produces("application/json", "application/xml")]
public ContentResult GetByAddress(string address)
{
return Content("<xml>...</xml>", "application/xml", Encoding.UTF8);
}