jQuery   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了jquery – 无法POST到IHTTPHandler类,Access-Control-Allow-Origin不允许来源大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个C#SOAP Web服务以及部署到https:// localhost:123的一些自定义IhttpHandler类.我在http:// localhost上有一个 HTML页面,试图使用jQuery向其中一个处理程序发送一个AJAX POST请求.我每次都得到以下内容

我尝试过像在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控制台中出现了错误,因此我的成功事件处理程序不会触发.

解决方法

@H_607_44@ 您的处理程序的Processrequest还应设置以下标头:

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,请注明来意。