1. 程式人生 > >ajax自定義header跨域訪問webapi 405異常的解決方法

ajax自定義header跨域訪問webapi 405異常的解決方法

http://www.cnblogs.com/dowork/p/5068517.html

在ajax對webapi進行CORS跨域訪問過程中,如果自定義header,瀏覽器會發出一個options的請求。

詢問瀏覽器是否支援自定義的header型別。

webapi需要做如下處理,才能正常返回瀏覽器請求

1 在global中對options方法進行預處理,返回服務支援的header型別

複製程式碼
        protected void Application_BeginRequest(object sender, EventArgs e)
        {
            var res = HttpContext.Current.Response;
            
var req = HttpContext.Current.Request; //自定義header時進行處理 if (req.HttpMethod == "OPTIONS") { res.AppendHeader("Access-Control-Allow-Headers", "Content-Type, X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Date, X-Api-Version, X-File-Name,Token
,Cookie
"); res.AppendHeader("Access-Control-Allow-Methods", "POST,GET,PUT,PATCH,DELETE,OPTIONS"); res.StatusCode = 200; res.End(); } }
複製程式碼

2 在Web.config中設定跨域引數

1 2 3 4 5 6 7 <httpProtocol> <customHeaders> <add name=
"Access-Control-Allow-Origin" value="*" /> <add name="Access-Control-Allow-Headers" value="*" /> <add name="Access-Control-Allow-Methods" value="*" /> </customHeaders> </httpProtocol>

3 瀏覽器經過預處理請求後即可自動訪問原始請求,請求呼叫順序如下

OPTIONS預處理請求:

1 2 3 4 5 6 7 8 9 10 11 OPTIONS http://localhost:8225/api/UserInfo/QueryUserByParam/ HTTP/1.1 Host: localhost:8225 Connection: keep-alive Access-Control-Request-Method: POST Origin: http://localhost:5964 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36 Access-Control-Request-Headers: accept, content-type, token Accept: */* Referer: http://localhost:5964/Page/UserPage.aspx Accept-Encoding: gzip, deflate, sdch Accept-Language: zh-CN,zh;q=0.8

預處理請求成功:

1 2 3 4 5 6 7 8 9 10 11 HTTP/1.1 200 OK Server: Microsoft-IIS/10.0 Access-Control-Allow-Headers: Content-Type, X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Date, X-Api-Version, X-File-Name,Token,Cookie Access-Control-Allow-Methods: POST,GET,PUT,PATCH,DELETE,OPTIONS X-SourceFiles: =?UTF-8?B?RDpcQ29kZVx0b2dvXOa6kOS7o+eggVx0cnVua1xUb2dvXDAxLlRvR28uV2ViQXBpXGFwaVxVc2VySW5mb1xRdWVyeVVzZXJCeVBhcmFtXA==?= X-Powered-By: ASP.NET Access-Control-Allow-Origin: * Access-Control-Allow-Headers: * Access-Control-Allow-Methods: * Date: Tue, 22 Dec 2015 15:19:22 GMT Content-Length: 0

瀏覽器自動發出原始請求:

1 2 3 4 5 6 7 8 9 10 GET http://localhost:8225/api/Common/GetUserTypes HTTP/1.1 Host: localhost:8225 Connection: keep-alive Accept: */* Origin: http://localhost:5964 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36 Token: dQTvMagtBk2cJg5WrpmcKQ Referer: http://localhost:5964/Page/UserPage.aspx Accept-Encoding: gzip, deflate, sdch Accept-Language: zh-CN,zh;q=0.8

相關推薦

ajax定義header訪問webapi 405異常解決方法

http://www.cnblogs.com/dowork/p/5068517.html 在ajax對webapi進行CORS跨域訪問過程中,如果自定義header,瀏覽器會發出一個options的請求。 詢問瀏覽器是否支援自定義的header型別。 webap

Geoserver通過ajax訪問服務數據的方法(含用戶名密碼認證的配置方式)

methods -name sevlet ajax war包部署 ins 了解 thrown b- Goeserver數據有兩種,一種需進行用戶密碼的權限認證,一種無須用戶密碼。對於網上跨域訪問Geoserver數據的種種方法,對這2種數據並非通用。 筆者將Geoserve

Ajax通過jsonp實現訪問,訪問成功但走error不走success的的問題解決

前提 最近工作中有個需求就是JS實現跨域訪問,眾所周知JS不能實現跨域訪問,但是”script”標籤卻可以,這是Jsonp實現的原理,這裡就不多講了,這裡主要講ajax通過Jsonp跨域訪問雖然返回200但總是走error不走success的解決方案

Ext.Ajax+Servlet+tomcate實現訪問

最近在做後臺和前臺通訊,由於使用eclipse編寫前臺不方便,所以考慮是將前臺和後臺分開開發,後臺用eclipse,前臺用WebStorm開發,但是通過Ext.Ajax+Struts2訪問時發現不能跨域,配置了兩天也沒弄好,因此暫時就拋棄了Struts2使用最原始的Serv

解決ajax和spring的訪問問題

1. 在 ajax的dataType中給出的屬性值是jsonp 2. 在請求的方法中加上引數名為callback的引數 3. 使用@ResponseBody標籤表明該方法為非同步請求方法,返回值為Object    在return後的虛擬碼為  return new J

ajax問題的另類解決方法

我們知道瀏覽器基於安全的考慮,AJAX只能訪問本域下的資源,而不能跨域訪問。也就是說,domain1.com站點中的AJAX只能訪問domain1.com站點下的資源,而不能跨域訪問domain2.com站點中的資源.這就是AJAX跨域問題. 但如果要訪問不同域的資料時,由

SpringMVC同時使用<mvc:resources … />和裝配定義轉換器Converter時出現問題的解決方法

一、問題由來 在學習SpringMVC的過程中,對於URL的攔截,使用了RESTful形式,因為使用了RESTful所以,在將Servlet作為Controller中的時候,web.xml中配置攔截的url-pattern就寫成了 / ,如下所示: <servlet> <

android-繼承BaseAdapter--定義介面卡,getView執行多次的解決方法

定義的getView執行多次的ListView佈局: <ListView android:id="@+id/lv_messages" android:layout

ajax 定義header

  1、前端ajax設定表頭資訊兩種方式: <script src="jquery.min.js"></script> <script > $(function(){ $.ajax({ //第一

請求asp.net core webapi 介面,返回定義header

這個簡單的問題對於初學core的我來說還是折騰了好久,然後加了一個群問了一下,終於解決了,感謝大神的指點; 官方api: 總結:閱讀官方的api文件很重要啊,慚愧啊; 然後以此備忘吧。 我在header裡面返回自定義引數count,startup.cs配置如下:

ASP.NET MVC & WebApi 中實現Cors來讓Ajax可以訪問 (轉載)

詳細 簡介 part bsp bob 打印 不能 res user 什麽是Cors? CORS是一個W3C標準,全稱是"跨域資源共享"(Cross-origin resource sharing)。它允許瀏覽器向跨源服務器,發出XMLHttpRequest請求,從而克服了

IIS ajax CORS 訪問發送定義Header時分析

nbsp post true cal 後臺 config -a coo function 場景: a站:http://127.0.0.1/a b站:http://localhost/b (IIS7.5) a站用ajax訪問b的資源,代碼如下: $.ajaxSetu

[轉]No 'Access-Control-Allow-Origin' header is present on the requested resource.'Ajax訪問解決方案

不能 ade 方式 ole 相同域名 all log head 允許 原 https://blog.csdn.net/zhoucheng05_13/article/details/53580683 No ‘Access-Control-Allow-Origin‘ heade

No 'Access-Control-Allow-Origin' header is present on the requested resource.'Ajax訪問解決方案

出現該錯誤是由於存在網站跨域訪問的問題。 什麼是網站跨域,簡單來講,當你通過ajax來請求或傳送資料時,兩個域名之間不能跨過域名來發送請求或者請求資料,瀏覽器會認為它是不安全的。 解決方式: 1、伺服器端解決方案 設定響應報文頭 response.setHeader

springboot2.0專案axiosoptions請求攜帶定義header後臺接收不到

前臺發起請求後報錯 Failed to load http://192.168.1.107:8066/talk/queryList: Response to preflight request doesn't pass access control check: No 'Access-Cont

本地Ajax訪問 No 'Access-Control-Allow-Origin' header is present on the requested resource.

XMLHttpRequest cannot load http://lefeier.net/storemessage.php. No ‘Access-Control-Allow-Origin’ header is present on the request

SpringMvc支援定義header

<!-- 支援options型別請求 --> <servlet> <servlet-name>application</servlet-name> <servlet-class&g

[Ajax]設定Access-Control-Allow-Origin實現訪問(Header)

ajax跨域訪問是一個老問題了,解決方法很多,比較常用的是JSONP方法,JSONP方法是一種非官方方法,而且這種方法只支援GET方式,不如POST方式安全。 即使使用jquery的jsonp方法,type設為POST,也會自動變為GET。 官方問題說明: “s

解決 js ajax訪問報“No 'Access-Control-Allow-Origin' header is present on the requested resource.”錯誤

訪問 con tails request pre ade ont details -a 參考頁面:https://blog.csdn.net/idomyway/article/details/79572973 如果請求的是PHP頁面: header("Access-

解決jquery ajax訪問post請求的時候,ie9以下無效(包括ie9)的問題

jquery src actor div tick 屬性 dex 啟用 logs 最近在做項目的時候遇到一個問題,就是跨域請求ajax的時候ie9以下的瀏覽器不可以訪問,直接執行error裏面的代碼,但是也不報錯,就上網查了查,發現了一個很好用的方法,在這裏記錄一下,也希望