ASP.NET MVC中設(shè)置跨域訪(fǎng)問(wèn)問(wèn)題
1、什么是跨域請(qǐng)求
js禁止向不是當(dāng)前域名的網(wǎng)站發(fā)起一次ajax請(qǐng)求,即使成功respone了數(shù)據(jù),但是你的js仍然會(huì)報(bào)錯(cuò)。這是JS的同源策略限制,JS控制的并不是我們網(wǎng)站編程出現(xiàn)了問(wèn)題??蛻?hù)端(網(wǎng)頁(yè))和后臺(tái)編程都可以有效解決這個(gè)問(wèn)題。客戶(hù)端可以通過(guò)JSONP來(lái)完成跨域訪(fǎng)問(wèn);在ES6中為了解除同源策略問(wèn)題,想出一個(gè)辦法:當(dāng)被請(qǐng)求網(wǎng)站為響應(yīng)頭respone添加了一個(gè)名為Access-Control-Allow-Origin的header,設(shè)置其值等于發(fā)起請(qǐng)求網(wǎng)站的域名地址的話(huà),這次請(qǐng)求被視為允許。其中Access-Control-Allow-Origin的值為*時(shí)表示允許所有網(wǎng)站的跨域請(qǐng)求。
本文主要探索如何在后臺(tái)代碼中設(shè)置允許跨域訪(fǎng)問(wèn)。
2、在action中添加代碼
HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Origin", "*");
3、在webconfig添加應(yīng)用程序配置:
<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="*" /> </customHeaders> </httpProtocol> </system.webServer>
4、添加action過(guò)濾器
不論webapi還是mvc的action,我們都可以重寫(xiě)ActionFilterAttribute過(guò)濾器的OnException方法來(lái)在action執(zhí)行完成之后,為http響應(yīng)添加header頭;OnException方法意為在action執(zhí)行完成之后進(jìn)行的操作。這個(gè)過(guò)濾器可以添加在action或者controller上,但是這樣就要為每一個(gè)action或者controller打上這個(gè)過(guò)濾器,這里將我們重寫(xiě)的action過(guò)濾器添加在了全局的過(guò)濾器中,這樣,每一個(gè)action在執(zhí)行完成之后都會(huì)觸發(fā)這個(gè)過(guò)濾器,這里以webapi為例。新建類(lèi):
/// <summary> /// 跨域 /// </summary> public class Cores:ActionFilterAttribute { public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) { base.OnActionExecuted(actionExecutedContext); actionExecutedContext.Response.Headers.Add("Access-Control-Allow-Origin","*"); } }
在webapiconfig中添加。
public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API 配置和服務(wù) // 將 Web API 配置為僅使用不記名令牌身份驗(yàn)證。 config.SuppressDefaultHostAuthentication(); config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); // Web API 路由 config.MapHttpAttributeRoutes(); config.Filters.Add(new Cores()); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
總結(jié)
以上所述是小編給大家介紹的ASP.NET MVC中設(shè)置跨域訪(fǎng)問(wèn)問(wèn)題,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- asp.net core webapi 服務(wù)端配置跨域的實(shí)例
- 談?wù)勅绾卧贏SP.NET Core中實(shí)現(xiàn)CORS跨域
- ASP.NET中Web API解決跨域問(wèn)題
- ASP.NET WebAPI2復(fù)雜請(qǐng)求跨域設(shè)置的方法介紹
- asp.net基于JWT的web api身份驗(yàn)證及跨域調(diào)用實(shí)踐
- ASP.net WebAPI跨域調(diào)用問(wèn)題的解決方法
- 支持Ajax跨域訪(fǎng)問(wèn)ASP.NET Web Api 2(Cors)的示例教程
- ASP.NET?CORE實(shí)現(xiàn)跨域
相關(guān)文章
Asp.Net Core使用swagger生成api文檔的完整步驟
這篇文章主要給大家介紹了關(guān)于Asp.Net Core使用swagger生成api文檔的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Asp.Net Core具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Asp.net使用SignalR實(shí)現(xiàn)聊天室的功能
這篇文章主要介紹了Asp.net使用SignalR實(shí)現(xiàn)聊天室的功能的相關(guān)資料,需要的朋友可以參考下2016-04-04ASP.NET?MVC5網(wǎng)站開(kāi)發(fā)咨詢(xún)管理的架構(gòu)(十一)
這篇文章主要介紹了ASP.NET?MVC5網(wǎng)站開(kāi)發(fā)咨詢(xún)管理的架構(gòu),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-09-09ASP.NET框架中的數(shù)據(jù)綁定概要與數(shù)據(jù)綁定表達(dá)式的使用
數(shù)據(jù)綁定是ASP.NET中操作數(shù)據(jù)的基礎(chǔ)方式,這里我們暫時(shí)拋開(kāi).NET提供的控件,來(lái)從基礎(chǔ)上講解ASP.NET框架中的數(shù)據(jù)綁定概要與數(shù)據(jù)綁定表達(dá)式的使用:2016-06-06ASP.NET中實(shí)現(xiàn)根據(jù)匿名類(lèi)、datatable、sql生成實(shí)體類(lèi)
這篇文章主要介紹了ASP.NET中實(shí)現(xiàn)根據(jù)匿名類(lèi)、datatable、sql生成實(shí)體類(lèi),這個(gè)小小工具類(lèi)非常實(shí)用,使用起來(lái)也很方便,需要的朋友可以參考下2015-06-06Asp.Net使用Bulk實(shí)現(xiàn)批量插入數(shù)據(jù)
這篇文章主要介紹了Asp.Net使用Bulk實(shí)現(xiàn)批量插入數(shù)據(jù)的方法,對(duì)于進(jìn)行asp.net數(shù)據(jù)庫(kù)程序設(shè)計(jì)非常有借鑒價(jià)值,需要的朋友可以參考下2014-09-09