【问题标题】:.NET Framework Swashbucket Examples SwaggerRequestExample throws System.ArgumentNullException.NET Framework Swashbucket 示例 SwaggerRequestExample 引发 System.ArgumentNullException
【发布时间】:2020-06-09 15:28:48
【问题描述】:

我使用 Swashbucket 和 Swashbucket.Examples NugetPackages 在 .NET Framework (v.4.7.2) 中提供 Swagger API

遵循 https://github.com/mattfrear/Swashbuckle.AspNetCore.Filters 上的文档 我正在尝试像这样使用 SwaggerRequestExample 属性:

[HttpPost]
[Route("search")]
[SwaggerRequestExample(typeof(OrderRequestExample), typeof(OrderRequestExampleProvider))]
public async Task<HttpResponseMessage> SearchAsync()
{
...
}

我的 Startup 类的配置如文档中所述:

config.EnableSwagger(c =>
            {
                c.SingleApiVersion("v1", "MyApi");
                c.OperationFilter<ExamplesOperationFilter>();
                c.IncludeXmlComments(System.String.Format(@"{0}\bin\MyApi_Api.xml",
                    System.AppDomain.CurrentDomain.BaseDirectory));
                //c.OperationFilter<AddResponseHeadersFilter>();
            }).EnableSwaggerUi(c => { c.DocumentTitle("My API");});

当我使用 SwaggerRequestExample 属性时,UI 显示错误:

500 : {"Message":"An error has occurred.","ExceptionMessage":"Der Wert darf nicht NULL sein.\r\nParametername: source","ExceptionType":"System.ArgumentNullException","StackTrace":" bei System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)\r\n bei Swashbuckle.Examples.ExamplesOperationFilter.SetRequestModelExamples(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)\r\n bei Swashbuckle.Examples.ExamplesOperationFilter.Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)\r\n bei Swashbuckle.Swagger.SwaggerGenerator.CreateOperation(ApiDescription apiDesc, SchemaRegistry schemaRegistry)\r\n bei Swashbuckle.Swagger.SwaggerGenerator.CreatePathItem(IEnumerable`1 apiDescriptions, SchemaRegistry schemaRegistry)\r\n bei Swashbuckle.Swagger.SwaggerGenerator.<>c__DisplayClass7.<GetSwagger>b__4(IGrouping`2 group)\r\n bei System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)\r\n bei Swashbuckle.Swagger.SwaggerGenerator.GetSwagger(String rootUrl, String apiVersion)\r\n bei Swashbuckle.Application.SwaggerDocsHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\r\n bei System.Net.Http.HttpMessageInvoker.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\r\n bei System.Web.Http.Dispatcher.HttpRoutingDispatcher.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\r\n bei System.Net.Http.DelegatingHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\r\n bei System.Web.Http.HttpServer.<SendAsync>d__24.MoveNext()"} https://localhost:44384/swagger/docs/v1

显然,缺少“源”(IEnumerable)(空)。我找不到在哪里添加它。

示例类:

public class OrderRequestExampleProvider : IExamplesProvider
{
    public object GetExamples()
    {
        return new OrderRequestExample()
        {
            Name = "some name"
        };
    }
}

public class OrderRequestExample
{
    public string Name { get; set; }
}

【问题讨论】:

    标签: swashbuckle swashbuckle.examples


    【解决方案1】:

    解决方案似乎很明显,但如果您不在方法签名中使用主体的反序列化,则会出现此错误。

    将请求对象添加到方法签名后不会发生异常。

    public async Task<HttpResponseMessage> SearchAsync([FromBody]OrderRequestExample request) {
    ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多