C# 加载时SwashBuck文档NullReferenceException异常

C# 加载时SwashBuck文档NullReferenceException异常,c#,.net,asp.net-web-api2,swashbuckle,C#,.net,Asp.net Web Api2,Swashbuckle,我们当前在尝试访问文档时遇到问题。目前,我们在Webforms web应用程序中主持了一个WebAPI2项目,该项目已经为我们工作了近一年。我们正在使用Swashback 5.2.2,但我确实更新到了当前版本,看看它是否能够解决这个问题。它并没有神奇地解决这个问题,所以现在它恢复到5.2.2,因为我们即将发布 几周前,文档在试图打开时突然抛出异常。到目前为止,我们能够收集到的唯一信息是输出到浏览器的以下信息: <Error> <Message>An error has o

我们当前在尝试访问文档时遇到问题。目前,我们在Webforms web应用程序中主持了一个WebAPI2项目,该项目已经为我们工作了近一年。我们正在使用Swashback 5.2.2,但我确实更新到了当前版本,看看它是否能够解决这个问题。它并没有神奇地解决这个问题,所以现在它恢复到5.2.2,因为我们即将发布

几周前,文档在试图打开时突然抛出异常。到目前为止,我们能够收集到的唯一信息是输出到浏览器的以下信息:

<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>Object reference not set to an instance of an object.</ExceptionMessage>
<ExceptionType>System.NullReferenceException</ExceptionType>
<StackTrace>   at ᜄ.ᜀ.<>c.ᜀ(Task`1 A_0)
   at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
   at System.Threading.Tasks.Task.Execute()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Web.Http.Cors.CorsMessageHandler.<SendAsync>d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Web.Http.HttpServer.<SendAsync>d__0.MoveNext()
</StackTrace>
</Error>

发生了一个错误。
对象引用未设置为对象的实例。
System.NullReferenceException
在ᜄ.ᜀ.Cᜀ(任务'1 A_0)
位于System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
在System.Threading.Tasks.Task.Execute()中
---来自引发异常的上一个位置的堆栈结束跟踪---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在System.Web.Http.Cors.CorsMessageHandler.d_u0.MoveNext()中
---来自引发异常的上一个位置的堆栈结束跟踪---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在System.Web.Http.HttpServer.d_u0.MoveNext()中
我们已经确定了它停止工作的构建,并检查了触发该构建的代码提交。但是,除了主webapp中的一些CSS之外,根本没有提交WebAPI项目,也没有任何其他内容不会影响Swagger文档

我们比较了两个版本之间的web应用程序文件夹,除了CSS的细微差异之外,唯一的区别是重新编译的项目程序集。每个构建都是从源代码管理新构建的

我已经检查了WebAPI2项目程序集,自定义的swagger资源文件(图像、html和css文件)已正确嵌入到这两个版本中

以下是我们的SwaggerConfig内容(更改了一些识别名称):

const字符串webApiXmlDocFileName=“WebAPI2.xml”;
常量字符串modelXmlDocFileName=“Core.xml”;
全局配置
.EnableSwagger(“api/docs/{apiVersion}”,c=>
{
c、 忽略过时操作();
c、 IgnoreObsoletProperties();
c、 descripbeAllenumsasstrings();
c、 includexmlcoments(webApiXmlDocFileName);
c、 IncludeXmlComments(modelXmlDocFileName);
c、 DocumentFilter();
c、 ResolveConflictingActions(apisdescriptions=>apisdescriptions.First());
c、 单一API版本(“v1”,“API参考”);
c、 方案(新的[]{“http”,“https”});
c、 OAuth2(“OAuth2”)
.说明(“OAuth2隐式授权”)
.TokenUrl(“/api/oauth2/token”)
.Flow(“密码”)
.Scopes(Scopes=>
{
添加(“clientid”,“试用简单api”);
});
c、 操作过滤器();
})
.EnableSwaggerUi(“api/docs/ui/{*assetPath}”,c=>
{
//指定我们的自定义模板,而不是默认模板
c、 InjectStylesheet(Assembly.getExecutionGassembly(),“WebAPI2.SwashbuckleExtensions.index.css”);
c、 CustomAsset(“index”,Assembly.getExecutionGassembly(),“WebAPI2.SwashbuckleExtensions.index.html”);
c、 CustomAsset(“logo”,Assembly.getExecutionGassembly(),“WebAPI2.SwashbuckleExtensions.logo white.png”);
c、 EnableOAuth2Support(“客户端ID”、“领域”、“项目”);
c、 禁用验证器();
});
我们没有从日志中获取任何信息,并且遍历所有代码不会暴露出错误

有人对如何进一步深入这方面有什么建议吗?我们在这里有点不知所措,因为我们无法捕获请求路由中错误的来源。任何帮助都将不胜感激

编辑 我终于找到了更多的信息,可能会对这个问题有所帮助

我们在应用程序中使用一个第三方控件,它看起来像是承载自己的WebAPI实例,以便处理自己的RESTful调用。上述错误发生在webapp初始化期间调用其特定方法时。我已经联系过他们,看看是否需要打这个电话,或者不打这个电话会有什么后果


问题是,有没有办法让Swashback完全忽略程序集或类?由于它是第三方的,我们无法修改它以添加自定义属性,并且使用过滤器将无法工作,因为此时已引发异常。

不确定这是否是您遇到的情况,但我遇到了相同的System.NullReferenceException:“对象引用未设置为对象的实例。”第行中的异常

foreach(apiExplorer.apisdescriptions中的var组):

通过逐行删除我添加的内容,我得出结论,我在API控制器操作的[Route]属性中犯了一个错误。 我没有用“/”关闭路线

所以,这不起作用

[Route("templateFields/{templateFieldId:int}/inputtype")]
但是这个奏效了

[路由(“templateFields/{templateFieldId:int}/inputtype/”)-不是结尾处的/


这导致了例外

不确定这是否是您遇到的情况,但我遇到了相同的System.NullReferenceException:'对象引用未设置为对象的实例。'在

foreach(apiExplorer.apisdescriptions中的var组
):

通过逐行删除我添加的内容,我得出结论,我在API控制器操作的[Route]属性中犯了一个错误。 我没有用“/”关闭路线

所以,这不起作用

[Route("templateFields/{templateFieldId:int}/inputtype")]
但是这个奏效了
[Route("templateFields/{templateFieldId:int}/inputtype")]