ajax 跨域问题

mvc 项目中需要在服务端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>
    <!-- 这是防止跨域问题增加的代码  结束-->
    <modules>
      <remove name="FormsAuthentication" />
    </modules>
  </system.webServer>

  如果是web api 项目(JsonP方式请求数据)

以我们需要对WebAPI做拓展,让它支持这样的callback

解决方案如下:

只需要给全局注册一个JsonCallbackAttribute,就可以判断接口的访问是属于跨域,还是非跨域,正常的返回。

因为我们的接口,可能是用来给 移动端(Android 、IOS)做数据接口,也有可能是给网站用,所以,考虑到可能存在跨域的问题。

<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);

}

  

posted @ 2015-04-08 09:38  炎蓝刀锋  阅读(124)  评论(0编辑  收藏  举报

生活中快乐要多一点!