婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 基于CORS實現WebApi Ajax 跨域請求解決方法

基于CORS實現WebApi Ajax 跨域請求解決方法

熱門標簽:中國地圖標注不明確情況介紹表 立陶宛地圖標注 地圖標注推銷坑人 東平縣地圖標注app 怎樣在地圖標注文字 大眾點評400電話怎么申請 河間市地圖標注app 電銷機器人 長春 上海企業外呼系統價錢

概述

ASP.NET Web API 的好用使用過的都知道,沒有復雜的配置文件,一個簡單的ApiController加上需要的Action就能工作。但是在使用API的時候總會遇到跨域請求的問題,特別各種APP萬花齊放的今天,API的跨域請求是不能避免的。

在默認情況下,為了防止CSRF跨站的偽造攻擊(或者是 javascript的同源策略(Same-Origin Policy)),一個網頁從另外一個域獲取數據時就會收到限制。有一些方法可以突破這個限制,那就是大家熟知的JSONP, 當然這只是眾多解決方法中一種,由于JSONP只支持GET的請求,如今的復雜業務中已經不能滿足需求。而CORS(Cross Origin Resource Sharing https://www.w3.org/wiki/CORS)跨域資源共享,是一種新的header規范,可以讓服務器端放松跨域的限制,可以根據header來切換限制或者不限制跨域請求。重要的是它支持所有http請求方式。

問題

XMLHttpRequest 跨域 POST或GET請求 ,請求方式會自動變成OPTIONS的問題。

由于CORS(cross origin resource share)規范的存在,瀏覽器會首先發送一次options嗅探,同時header帶上origin,判斷是否有跨域請求權限,服務器響應access control allow origin的值,供瀏覽器與origin匹配,如果匹配則正式發送post請求,即便是服務器允許程序跨域訪問,若不支持 options 請求,請求也會死掉。

原因

瀏覽器為了安全起見,會Preflighted Request的透明服務器驗證機制支持開發人員使用自定義的頭部、GET或POST之外的方法,以及不同類型的主題內容,也就是會先發送一個 options 請求,
問問服務器是否會正確(允許)請求,確保請求發送是安全的。

出現 OPTIONS 的情況一般為:

1、非GET 、POST請求

2、POST請求的content-type不是常規的三個:application/x- www-form-urlencoded(使用 HTTP 的 POST 方法提交的表單)、multipart/form-data(同上,但主要用于表單提交時伴隨文件上傳的場合)、text/plain(純文本) 

3、POST請求的payload為text/html 

4、設置自定義頭部

OPTIONS請求頭部中會包含以下頭部:Origin、Access-Control-Request-Method、Access-Control-Request-Headers,發送這個請求后,服務器可以設置如下頭部與瀏覽器溝通來判斷是否允許這個請求。
Access-Control-Allow-Origin、Access-Control-Allow-Method、Access-Control-Allow-Headers

解決方法

此方法功能強大,可以解決ASP.NET Web API復雜跨域請求,攜帶復雜頭部信息,正文內容和授權驗證信息

方法一

public class CrosHandler:DelegatingHandler
{
 private const string Origin = "Origin";
 private const string AccessControlRequestMethod = "Access-Control-Request-Method";
 private const string AccessControlRequestHeaders = "Access-Control-Request-Headers";
 private const string AccessControlAllowOrign = "Access-Control-Allow-Origin";
 private const string AccessControlAllowMethods = "Access-Control-Allow-Methods";
 private const string AccessControlAllowHeaders = "Access-Control-Allow-Headers";
 private const string AccessControlAllowCredentials = "Access-Control-Allow-Credentials";
 protected override TaskHttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
 {
  bool isCrosRequest = request.Headers.Contains(Origin);
  bool isPrefilightRequest = request.Method == HttpMethod.Options;
  if (isCrosRequest)
  {
   TaskHttpResponseMessage> taskResult = null;
   if (isPrefilightRequest)
   {
    taskResult = Task.Factory.StartNewHttpResponseMessage>(() =>
    {
     HttpResponseMessage response = new HttpResponseMessage(System.Net.HttpStatusCode.OK);
     response.Headers.Add(AccessControlAllowOrign,
      request.Headers.GetValues(Origin).FirstOrDefault());
     string method = request.Headers.GetValues(AccessControlRequestMethod).FirstOrDefault();
     if (method != null)
     {
      response.Headers.Add(AccessControlAllowMethods, method);
     }
     string headers = string.Join(", ", request.Headers.GetValues(AccessControlRequestHeaders));
     if (!string.IsNullOrWhiteSpace(headers))
     {
      response.Headers.Add(AccessControlAllowHeaders, headers);
     }
     response.Headers.Add(AccessControlAllowCredentials, "true");
     return response;
    }, cancellationToken);
   }
   else
   {
    taskResult = base.SendAsync(request, cancellationToken).ContinueWithHttpResponseMessage>(t =>
    {
     var response = t.Result;
     response.Headers.Add(AccessControlAllowOrign,
      request.Headers.GetValues(Origin).FirstOrDefault());
     response.Headers.Add(AccessControlAllowCredentials, "true");
     return response;
    });
   }
   return taskResult;
  }
  return base.SendAsync(request, cancellationToken);
 }
}

使用方式,在Global.asax文件添加

protected void Application_Start()
{
 IOCConfig.RegisterAll();
 AreaRegistration.RegisterAllAreas();
 WebApiConfig.Register(GlobalConfiguration.Configuration);
 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
 RouteConfig.RegisterRoutes(RouteTable.Routes);
 BundleConfig.RegisterBundles(BundleTable.Bundles);
 GlobalConfiguration.Configuration.MessageHandlers.Add(new CrosHandler());
}

方法二

配置文件中添加如下配置,此方法簡單,應對簡單的跨域請求

system.webServer>
 httpProtocol>
  customHeaders>
  add name="Access-Control-Allow-Origin" value="*" />
  add name="Access-Control-Allow-Headers" value="Content-Type" />
  add name="Access-Control-Allow-Methods" value="GET, POST,OPTIONS" />
  /customHeaders>
 /httpProtocol>
system.webServer>

總結

以上所述是小編給大家介紹的基于CORS實現WebApi Ajax 跨域請求解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

您可能感興趣的文章:
  • Apache中配置支持CORS(跨域資源共享)實例
  • 跨域資源共享 CORS 詳解
  • 淺析jsopn跨域請求原理及cors(跨域資源共享)的完美解決方法
  • JS跨域解決方案之使用CORS實現跨域
  • js實現跨域的幾種方法匯總(圖片ping、JSONP和CORS)
  • 跨域請求的完美解決方法(JSONP, CORS)
  • 跨域請求兩種方法 jsonp和cors的實現
  • 你可能不知道的CORS跨域資源共享

標簽:四川 益陽 遼寧 銅川 營口 本溪 內江 玉樹

巨人網絡通訊聲明:本文標題《基于CORS實現WebApi Ajax 跨域請求解決方法》,本文關鍵詞  基于,CORS,實現,WebApi,Ajax,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《基于CORS實現WebApi Ajax 跨域請求解決方法》相關的同類信息!
  • 本頁收集關于基于CORS實現WebApi Ajax 跨域請求解決方法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产激情一区二区三区| 国产农村妇女毛片精品久久麻豆| 欧美主播一区二区三区美女| 日韩精品一区二区三区视频| 中文字幕亚洲一区二区av在线 | 成人福利视频网站| 精品国产一区二区精华| 亚洲影视在线观看| 大胆亚洲人体视频| 久久老女人爱爱| 视频一区欧美日韩| 91色porny在线视频| 国产精品嫩草99a| 激情综合色综合久久综合| 欧美日韩aaaaa| 亚洲色图制服诱惑| www.欧美日韩国产在线| 中文字幕免费一区| 91丨porny丨首页| 国产精品国产三级国产普通话蜜臀| 日韩成人午夜电影| 欧美日韩一区二区欧美激情| 亚洲精品免费在线| 91色porny蝌蚪| 国产片一区二区| 男人的天堂亚洲一区| 91成人在线精品| 精品国产麻豆免费人成网站| 国产清纯白嫩初高生在线观看91| 99精品热视频| 555www色欧美视频| 国产精品久久免费看| 一区二区三区不卡视频 | 免费的成人av| 狠狠狠色丁香婷婷综合激情| 91理论电影在线观看| 欧美成人伊人久久综合网| 亚洲国产精品av| 日韩电影在线一区二区| 粉嫩嫩av羞羞动漫久久久| 欧美日韩一区三区四区| 欧美国产精品一区二区| 亚洲精品免费播放| 精品一区二区在线视频| 欧美日韩免费在线视频| 亚洲欧美激情视频在线观看一区二区三区| 久久精品国产秦先生| 欧美三级一区二区| 亚洲美女偷拍久久| youjizz久久| 国产亚洲综合色| 男男成人高潮片免费网站| 91丨九色丨蝌蚪丨老版| 国产日产欧美精品一区二区三区| 26uuu另类欧美亚洲曰本| 国产精品污www在线观看| 国产亚洲视频系列| 精品国产伦一区二区三区观看方式 | 欧美日韩高清不卡| 国产精品久久久爽爽爽麻豆色哟哟| 蜜臀av性久久久久蜜臀aⅴ四虎| 在线亚洲免费视频| 亚洲欧美另类久久久精品2019| 不卡视频在线观看| 亚洲欧洲日韩综合一区二区| 99综合电影在线视频| 亚洲日本护士毛茸茸| 在线观看视频一区二区| 亚洲成人福利片| 777a∨成人精品桃花网| 蜜臀av国产精品久久久久| 精品国产伦理网| 国产99久久久国产精品免费看 | 精品99一区二区三区| 欧美一区二区三区思思人| 欧美久久一区二区| 欧美一区二区三区的| 91麻豆精品国产| 国产一区999| 成人在线综合网| 亚洲人成人一区二区在线观看| 成人免费黄色大片| 亚洲色图20p| 91精品欧美综合在线观看最新| 日本亚洲一区二区| 久久精品一区二区三区四区| www.在线成人| 日韩精品国产欧美| 国产亚洲精品7777| 在线亚洲免费视频| 国产真实精品久久二三区| 综合分类小说区另类春色亚洲小说欧美| 色欧美乱欧美15图片| 欧美日本精品一区二区三区| 亚洲精品在线一区二区| 国产精品久久久久久久浪潮网站| 亚洲激情成人在线| 久久久精品tv| 一个色综合av| 精品精品国产高清a毛片牛牛| 成人福利视频在线| 婷婷久久综合九色综合伊人色| 国产乱子伦一区二区三区国色天香| 91精品国产入口| 久久精品国产网站| 欧美α欧美αv大片| 老司机精品视频线观看86| 成人avav影音| 国产美女主播视频一区| 亚洲国产精品久久一线不卡| 欧美极品美女视频| 日韩视频免费观看高清在线视频| 不卡av电影在线播放| 激情综合网最新| 亚洲电影第三页| 国产欧美日韩视频在线观看| 欧美一二三区在线观看| 91在线视频播放地址| 精品一区二区久久久| 伊人婷婷欧美激情| 国产精品欧美久久久久一区二区| 欧美成人精品福利| 亚洲制服欧美中文字幕中文字幕| 91麻豆产精品久久久久久 | 91亚洲精品久久久蜜桃网站 | 成人免费在线视频观看| 6080yy午夜一二三区久久| 99re6这里只有精品视频在线观看| 久久国产精品99精品国产| 亚洲欧美日韩中文字幕一区二区三区| 91精品国产综合久久久蜜臀粉嫩| 欧美亚洲动漫另类| 3d成人动漫网站| www..com久久爱| 一级精品视频在线观看宜春院 | 7777精品伊人久久久大香线蕉最新版 | 91色视频在线| 亚洲精品高清在线观看| 中文字幕一区av| 国产欧美日韩中文久久| 久久久国产午夜精品| 国产三级精品在线| 欧美精品一区二区三区四区 | 国产不卡免费视频| 久久99精品国产麻豆婷婷| 调教+趴+乳夹+国产+精品| 亚洲人吸女人奶水| 亚洲欧美中日韩| 亚洲综合在线第一页| 亚洲午夜电影在线观看| 日韩二区在线观看| 久久国产精品一区二区| 国产麻豆精品在线观看| 久久国产精品色| 国产激情精品久久久第一区二区| 国产精品影视天天线| 97久久超碰精品国产| 一本到不卡免费一区二区| 欧美日韩精品是欧美日韩精品| 欧美精选一区二区| 日韩精品一区二区在线| 久久精品一二三| 亚洲欧美欧美一区二区三区| 亚洲福利一区二区三区| 激情久久五月天| 成人h版在线观看| 在线一区二区视频| 91网上在线视频| 91视频观看免费| 91精品1区2区| 99久久免费精品| 日韩福利电影在线| 老司机精品视频线观看86| 国产精品乱人伦一区二区| 日韩福利视频网| 91免费看片在线观看| 精品人伦一区二区色婷婷| 亚洲色图丝袜美腿| 日韩手机在线导航| 一本到高清视频免费精品| 国产午夜精品在线观看| 日韩午夜av电影| 91亚洲午夜精品久久久久久| 欧美成人video| 亚洲一区二区三区小说| 高清成人在线观看| 日韩一区二区麻豆国产| 亚洲欧美日韩国产综合在线| 国产91精品欧美| 91精品国产综合久久久久久漫画| 亚洲男人的天堂av| av一区二区久久| 国产欧美一区视频| 久久成人免费网| 国产精品99久久久久久久女警| 91影院在线观看| 精品国产伦一区二区三区观看方式| 亚洲综合色视频| 色老头久久综合| 中文字幕亚洲一区二区va在线|