无法加载API定义

Joe*_*Doe 8 c# swagger swagger-ui asp.net-core-2.0

我有一个简单的ASP.NET核心API,我有一个控制器,它应该使用HttpRequestMessage的输入参数.我尝试了标准格式化程序,但它们不起作用:

  services.AddMvc(options =>
        {

             options.RespectBrowserAcceptHeader = true;

             options.InputFormatters.Add(new XmlSerializerInputFormatter());
             options.OutputFormatters.Add(new XmlSerializerOutputFormatter());

        }
Run Code Online (Sandbox Code Playgroud)

还试过这个格式化程序:

XmlDataContractSerializerOutputFormatter
Run Code Online (Sandbox Code Playgroud)

它也没有用.结果,我最终得到了一个自定义格式化程序:

public class RawInputFormatter : InputFormatter
{
    public override Boolean CanRead(InputFormatterContext context)
    {
        return true;
    }

    public override async Task<InputFormatterResult> ReadRequestBodyAsync(InputFormatterContext context)
    {
        if (context == null)
            throw new ArgumentNullException(nameof(context));

        var request = context.HttpContext.Request;
        using (var reader = new StreamReader(request.Body))
        {
            try
            {
                var content = await reader.ReadToEndAsync();
                return await InputFormatterResult.SuccessAsync(content);
            }
            catch
            {
                return await InputFormatterResult.FailureAsync();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

因此必须将输入参数类型从HttpRequestMessage更改为[FromBody]字符串

并且我能够在此更改后读取输入xml.

现在,当我启动API(并使用Swagger)时,Swagger的屏幕包含错误消息:无法加载API定义

它适用于我所拥有的API中的所有控制器.

我用谷歌搜索,但没有找到任何有价值的东西.请指教.

Tar*_*ncu 2

如果您共享您的 swagger 配置,那么解决此问题会更容易。

尝试将其添加到您的 swagger 配置中:

options.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
Run Code Online (Sandbox Code Playgroud)