隐藏

Js /JQuery跨域:PUT/DELETE请求接口405错误;( OPTIONS+ 地址 +405(Method Not Allowed))

发布:2019/7/9 0:16:43作者:管理员 来源:本站 浏览次数:967

摘要:(第一次写博客,仅供参考)今天天气很好于是我做起了项目,但是BUG又**很快又来了。。。废话不说了,描述下错误:前台使用Ajaxqing请求接口(当然我用的是webapi接口),出现错误。错误如下可以参考下:

错误信息

 

 (这是我的错误信息,可以对比一下。)

 
努力一:(此处并未解决问题,只是尝试下)

经过百度以及身边朋友的帮助得到的是服务器端Web.config配置的问题,但是之前我的已经配置过了,qian前台利用Ajax发送Get以及Post请求都是没问题的。 硬着头皮尝试了一波(其实尝试了很多次配置了不同的很多次),有效的代码如下:

     
        <handlers>
          <remove name="WebDAV" />
          <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
          <remove name="OPTIONSVerbHandler" />
          <remove name="TRACEVerbHandler" />
          <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
        </handlers>
        <modules>
            <remove name="WebDAVModule" />
        </modules>

此配置添加在web.config下system.webServer节点下(之前添加的跨域信息不能删除),针对IIS报405错误时大部分是可以解决的(我的就不行)。
努力二:(成功解决我的问题!!难受。。。哈哈)

废话不多说直接下干货:找到项目接口服务端下的Global.asax文件,在此文件中添加此代码:

    protected void Application_BeginRequest()
            {
                if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
                {
                    Response.End();
                }
            }

加入此代码片段重启项目,成功返回200(Nice)。我的错误解决!!!

为什么405错误:

     其实我解决之后也是一脸懵,只是大概了解原因,也并没有深入了解就发了这篇文章进行分享因为这个错误实在太难受。

请求Method是OPTIONS,错误信息是PUT请求,怎么出现了Method为OPTIONS的请求呢?

那么这个OPTIONS请求到底是什么?百度了一下得到了答案:

Preflighted Requests(预检请求)

Preflighted Requests是CORS中一种透明服务器验证机制。预检请求首先需要向另外一个域名的资源发送一个 HTTP OPTIONS 请求头,其目的就是为了判断实际发送的请求是否是安全的。

下面的2种情况需要进行预检:

1、简单请求,比如使用Content-Type 为 application/xml 或 text/xml 的 POST 请求;

2、中设置自定义头,比如 X-JSON、X-MENGXIANHUI 等。

原来如此,在js或者JQ发起PUT请求的时候,头部设置了XMLHttpRequest.setRequestHeader("Content-Type", "application/json"),所以请求的时候会多出一个OPTIONS,如果去掉这个头,就不会多出这次请求了。

 

此文章只是个人记录,非专业知识仅供参考,如问题解决欢迎大家支持。谢谢!!!