当前位置: 首页 > 知识库问答 >
问题:

如何在Appharbor上接受CORS AJAX请求?

夏振国
2023-03-14

我正在使用ThinkTecture.IdentityModel nuget包为MVC Web应用程序中的WebAPI控制器启用CORS。目前,我只担心文章,但让我知道任何问题与其他动词。这在运行IIS Express服务器时有效。

在处理AppHarbor部署时,它不起作用。nginx似乎不会将选项请求传递给我的代码。还需要什么才能让它在Appharbor上运行?

选项$PATH HTTP/1.1
主机:$ServerName连接:Keep-alive
Access-Control-Request-Method:Post
来源:http://www.local
用户代理:Mozilla/5.0(Windows NT 6.2;WOW64)AppleWebKit/537.17(KHTML,像Gecko一样)Chrome/24.0.1312.56 Safari/537.17
Access-Control-Request-Headers:accept,origin,Content-Type
accept:/
引用

HTTP/1.1 200 OK
服务器:nginx
日期:Wed,30 Jan 2013 02:34:14 GMT
内容-长度:0
连接:Keep-alive
允许:OPTIONS,TRACE,GET,HEAD,POST
公共:OPTIONS,TRACE,GET,HEAD,POST

我的web.config使用以下默认处理程序设置:

<handlers>
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

在Jeffery To的建议之后,我按照以下说明禁用了WebDAV。我甚至不知道WebDAV安装在AH上,但这样做确实改变了我的结果。

<handlers>
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <remove name="WebDAV" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<modules runAllManagedModulesForAllRequests="true">
  <remove name="WebDAVModule"/>
  <remove name="AspNetAppHarborIntegration" />
  <add name="AspNetAppHarborIntegration" type="Premotion.AspNet.AppHarbor.Integration.AppHarborModule, Premotion.AspNet.AppHarbor.Integration" />
</modules>

选项$PATH HTTP/1.1
主机:$ServerName
连接:Keep-alive
Access-Control-Request-Method:Post
来源:http://www.local
用户代理:Mozilla/5.0(Windows NT 6.2;WOW64)AppleWebKit/537.17(KHTML,像Gecko一样)Chrome/24.0.1312.57 Safari/537.17
Access-Control-Request-Headers:accept,origin,Content-Type
accept:/
引用

不允许HTTP/1.1 405方法
服务器:nginx
日期:Mon,04 Feb 2013 17:09:19 GMT
内容类型:Application/JSON;charset=utf-8
内容-长度:76
连接:保持-活动
缓存-控制:无缓存
实用:无缓存
过期:-1

共有1个答案

轩辕越泽
2023-03-14

WebDAV应该为最初的问题负责,即没有在响应中获得完整的CORS头。405错误是我的应用程序配置中的某个地方的问题。

在深入研究了内部之后,看来与WebAPI一起使用的CORSMessageHandler(由Thinktecture提供)没有正确地识别预飞行请求,而这些请求被路由到WebAPI对象本身。

我通过转移到IIS模块而不是WebAPI模块来解决这个问题。这可能会让以后的生活更加艰难,但至少管用。

 类似资料:
  • 我有2个Android设备直接使用WiFi。在一个设备上,我可以使用类获取关于另一个设备的信息,并请求连接到另一个设备。然而,当我请求连接时,另一个设备会弹出一个小窗口,询问用户是否要接受连接请求。 是否可以自动接受这些连接请求?即无需用户确认即可连接到其他设备?

  • 我正在尝试学习RESTfulWeb服务。我正在创建一组简单的web服务。我开始在邮局工作时被卡住了。 我想将JSON输入传递给POST方法。这是我在代码中所做的: 我在POM. xml中包含了Jackson。 MyCls是一个简单的类,包含一些getter和setter。 我从chrome的简单REST客户端调用上述POST服务。 我看到以下答复: 我尝试在REST客户端的POST请求中添加标头为

  • 本文向大家介绍playframework Java:接受JSON请求,包括了playframework Java:接受JSON请求的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 问题内容: 我有一个GET请求,该请求以YYYY-MM-DD格式发送日期到Spring Controller。控制器代码如下: 我正在使用Firebug检查时,请求已正确发送。我得到错误: HTTP状态400:客户端发送的请求在语法上不正确。 如何使控制器接受这种日期格式?请帮忙。我究竟做错了什么? 问题答案: 好的,我解决了。写给那些在一整天不间断的编码后可能会累并且错过这种愚蠢的事情的人。 是

  • 这个问题非常类似于这个SO问题,它是针对旧的API的。 我想用Java8API实现同样的效果。当我这么做的时候, 我明白,

  • 问题内容: 我试图了解如何使用WCF数据服务(基于EF 4.1)创建一个宁静的Web服务,该服务将保留作为JSON对象传递的实体。 我已经能够创建一种方法,该方法可以接受以一组原始数据类型作为参数的GET请求。我不喜欢这种解决方案,我更喜欢在HTTP请求正文中发送带有JSON对象的POST请求。 我发现我无法获得将json序列化为对象的框架,但是我可以手动完成。 我的问题是我似乎无法读取POST请