.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" 没有序列化。
一些调试:
- 该方法在 firefox 中运行良好。
- 如果启用 SSL,该方法适用于 chrome。
- 该方法适用于没有 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/
发现 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" 没有序列化。
一些调试:
- 该方法在 firefox 中运行良好。
- 如果启用 SSL,该方法适用于 chrome。
- 该方法适用于没有 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/