Я обнаружил, что это было довольно глупо ...
Оказывается, я думал, что поддержка XML была из коробки, но это не так: https://andrewlock.net/formatting-response-data-as-xml-or-json-based-on-the-url-in-asp-net-core/
My Startup.cs
:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddSwaggerGen(options =>
{
options.SwaggerDoc("v1", new Info {Title = "C# Web API", Version = "v1"});
var assemblyXmlPath = Assembly.GetExecutingAssembly().GetName().Name + ".xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, assemblyXmlPath);
options.IncludeXmlComments(xmlPath);
});
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
.AddXmlSerializerFormatters(); // <= this was missing...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseSwagger()
.UseSwaggerUI(options => options.SwaggerEndpoint("/swagger/v1/swagger.json", "v1"));
app.UseHttpsRedirection();
app.UseMvc();
}
}
Теперь для обеих конечных точек все в порядке:
λ Invoke-WebRequest -Uri "https://localhost:5001/api/v1/values/json" -Headers @{'Accept' = 'application/json'; }
Invoke-WebRequest : The remote server returned an error: (422) Unprocessable Entity.
At line:1 char:1
+ Invoke-WebRequest -Uri "https://localhost:5001/api/v1/values/json" -H ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], W
ebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
λ Invoke-WebRequest -Uri "https://localhost:5001/api/v1/values/xml" -Headers @{'Accept' = 'application/xml'; }
Invoke-WebRequest : The remote server returned an error: (422) Unprocessable Entity.
At line:1 char:1
+ Invoke-WebRequest -Uri "https://localhost:5001/api/v1/values/xml" -He ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], W
ebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
Я думаю, что эта ошибка вводит в заблуждение или вводит в заблуждение, заставляя вас думать, чтопроблема заключается в конфигурации контроллера / действия, а не в конфигурации служб.