大佬教程收集整理的这篇文章主要介绍了jquery – 无法POST到IHTTPHandler类,Access-Control-Allow-Origin不允许来源,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我尝试过像在this question中创建一个CrossOriginModule模块和CrossOriginHandler处理程序,按照他们的建议更新我的web.config.我尝试添加了context.Response.AppendHeader(“Access-Control-Allow-Headers”,“x-requested-with”);我的处理程序的Processrequest,如this question所示.我尝试按照this blog post中的步骤关于在web.config中的system.webServer / handlers中向SimpleHandlerFactory-Integrated-4.0添加OPTIONs.什么都没有帮助.
这是我的处理程序的Processrequest:
public void Processrequest(httpContext context) { context.Response.ContentType = "application/json"; context.Response.AppendHeader("Access-Control-Allow-Origin","*"); context.Response.AppendHeader("Access-Control-Allow-Headers","x-requested-with"); context.Response.Write( /* some JSON String */ ); }
这是我的web.config的相关部分:
<system.webServer> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> </customHeaders> </httpProtocol> <modules runAllManagedModulesForAllrequests="true"> <add name="CrossOriginModule" preCondition="managedHandler" type="MyNamespace.CrossOriginModule,MyNamespace,Version=1.0.0.0,Culture=neutral" /> </modules> <handlers> <add name="CrossOrigin" verb="OPTIONS" path="*" type="MyNamespace.CrossOriginHandler,Culture=neutral" /> <remove name="SimpleHandlerFactory-Integrated-4.0" /> <add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG,OPTIONS" type="System.Web.UI.SimpleHandlerFactory" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" /> <add name="MyHandler" verb="*" path="MyHandler.ashx" type="MyNamespace.MyHandler,Culture=neutral" /> </handlers> </system.webServer>
使用jQuery 1.7.2,这是我向处理程序发出请求的方式:
$.ajax({ url: url,data: {user: userName,pass: passworD},type: 'POST',dataType: 'json',success: function(data,textStatus,jqXHR) { ... } });
我也没有在服务器上使用COokie进行会话,所以< sessionState cookieless =“true”/>在我的web.config中,如果这很重要.我的服务器是IIS 7.5.
我能够为大多数请求使用JSONP,因为我没有在URL中传递敏感数据.但是,对于这个处理程序,我需要进行常规POST,因为它涉及发送纯文本密码.它通过SSL,但this post建议不要通过SSL传递URL中的敏感数据.因此,我需要通过AJAX向https URL发送POST请求并返回JSON,并且请求页面不会与服务器位于同一主机上.
编辑:我尝试过的其他一些事情:
更改我的web.config httpProtocol部分:
<httpProtocol> <customHeaders> <add name="Access-Control-Allow-Methods" value="OPTIONS,GET"/> <add name="Access-Control-Allow-Headers" value="x-requested-with"/> <add name="Access-Control-Allow-Origin" value="*" /><!-- Also tried http://localhost --> </customHeaders> </httpProtocol>
我添加了context.Response.AppendHeader(“Access-Control-Allow-Methods”,“POST”);到Processrequest.我还尝试了context.Response.AppendHeader(“Access-Control-Allow-Methods”,“POST,OPTIONS”);并更改我的jQuery ajax选项以包含contentType:’application / json’,这会导致它发出OPTIONS请求而不是POST – 这仍然失败.
我应该在< handlers>中列出web.config中的所有自定义IhttpHandler类吗?我现在有MyHandler,其动词=“*”,但它似乎没有帮助.
编辑:所以有些进一步的陌生感.根据我的日志记录输出,看起来我的请求实际上是在服务器端进行的,但是浏览器的行为就像它被拒绝了,仍然告诉我’origin localhost不允许’.所以我对服务器的AJAX POST就像我希望的那样对我进行身份验证,但是浏览器取消了请求并且Chrome控制台中出现了错误,因此我的成功事件处理程序不会触发.
Access-Control-Allow-Methods: POST
(基本上,应在OPTIONS响应中设置此标头,以及Access-Control-Allow-Headers响应标头).
以上是大佬教程为你收集整理的jquery – 无法POST到IHTTPHandler类,Access-Control-Allow-Origin不允许来源全部内容,希望文章能够帮你解决jquery – 无法POST到IHTTPHandler类,Access-Control-Allow-Origin不允许来源所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。