.Net Web API POST 方法响应 Chrome 浏览器问题 (Sitefinity CMS)

.Net Web API POST method response Chrome browser issue (Sitefinity CMS)

发现 Web Api 一个相当特殊的问题,return在响应正文中出现以下错误

{"Message":"An error has occurred.","ExceptionMessage":"Object reference not set to an instance of an object.","ExceptionType":"System.NullReferenceException","StackTrace":" at Telerik.Sitefinity.Web.Api.OData.Extensions.RequestMessageProperties.get_Service()\r\n at Telerik.Sitefinity.Web.Api.OData.Filters.CorsPolicyAttribute.GetCorsPolicyAsync(HttpRequestMessage request, CancellationToken cancellationToken)\r\n at System.Web.Http.Cors.CorsMessageHandler.d__10.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Cors.CorsMessageHandler.d__5.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Cors.CorsMessageHandler.d__0.MoveNext()"}

对于那些怀疑我是否在做 CORS 请求的人,不,我不是。

Web api post 方法完全执行,除了 return 部分,其中我 return 具有两个属性的 class 对象 "Status" 和 "Message" 没有序列化。

一些调试:

  1. 该方法在 firefox 中运行良好。
  2. 如果启用 SSL,该方法适用于 chrome。
  3. 该方法适用于没有 Sitefinity 的纯 .Net 项目。

如果您需要更多信息,请回复。

您可以尝试为您的网络 api 请求删除 Sitefinity 的模块。在 web.config 中添加此代码并更改您的请求的路径:

<location path="PATH TO YOUR API">
  <system.webServer>
     <validation validateIntegratedModeConfiguration="false" />
     <modules runAllManagedModulesForAllRequests="true">
       <remove name="Sitefinity"/>
       <remove name="SitefinityAnalyticsModule"/>
       <remove name="SitefinityAtompubModule"/>
       <remove name="RadUploadModule" />
       <remove name="RadCompression" />
     </modules>
   </system.webServer>
</location>

我在最新版本 - 9.2 中看到了这一点,我在其中注册了 /api/ 的自定义路由,看起来 Sitefinity 也在使用该路由并导致了此类错误。

我最终从 管理 > 模块和服务 中禁用了 built-in Web 服务模块(新功能),并将我的自定义路由重命名为其他名称,例如/ajax/