ajax 跨域问题
mvc 項(xiàng)目中需要在服務(wù)端webconfig 文件中添加
<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, PUT, DELETE, OPTIONS" /></customHeaders></httpProtocol><!-- 這是防止跨域問題增加的代碼 結(jié)束--><modules><remove name="FormsAuthentication" /></modules></system.webServer>如果是web api 項(xiàng)目(JsonP方式請求數(shù)據(jù))
以我們需要對WebAPI做拓展,讓它支持這樣的callback
解決方案如下:
只需要給全局注冊一個JsonCallbackAttribute,就可以判斷接口的訪問是屬于跨域,還是非跨域,正常的返回。
因?yàn)槲覀兊慕涌?#xff0c;可能是用來給 移動端(Android?、IOS)做數(shù)據(jù)接口,也有可能是給網(wǎng)站用,所以,考慮到可能存在跨域的問題。
<strong> GlobalConfiguration.Configuration.Filters.Add(new JsonCallbackAttribute());</strong> public class JsonCallbackAttribute : ActionFilterAttribute{private const string CallbackQueryParameter = 'callback';public override void OnActionExecuted(HttpActionExecutedContext context){var callback = string.Empty;if (IsJsonp(out callback)){var jsonBuilder = new StringBuilder(callback);jsonBuilder.AppendFormat('({0})', context.Response.Content.ReadAsStringAsync().Result);context.Response.Content = new StringContent(jsonBuilder.ToString());//context.Response.Content = new StringContent('C('a')');}base.OnActionExecuted(context);}private bool IsJsonp(out string callback){callback = System.Web.HttpContext.Current.Request.QueryString[CallbackQueryParameter];return !string.IsNullOrEmpty(callback);}
轉(zhuǎn)載于:https://www.cnblogs.com/sdaulldd/p/4401536.html
總結(jié)
- 上一篇: String,StringBuffer,
- 下一篇: 计算机网络之网络层:3、IPv4地址