使用Jquery调用WEB API和MVC时的跨域问题

      使用Jquery请求API时,某些浏览器下会提示跨域问题:

XMLHttpRequest cannot load http://localhost:25833/api/values/1. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
XHR failed loading: GET "http://localhost:25833/api/values/1".

在WEB API中的解决方法:

1. 先设置API返回Json格式:

GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();

2. 增加跨域特性:

    public class AllowCrossSiteJsonAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            if (actionExecutedContext.Response != null)
                actionExecutedContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");
            base.OnActionExecuted(actionExecutedContext);
        }
    }

3. 使用这个特性:

        [AllowCrossSiteJson]
        public HttpResponseMessage Get(int id)
        {
            string json = "{\"result\":\"true\"}";
            return new HttpResponseMessage { Content = new StringContent(json, System.Text.Encoding.UTF8, "application/json") };
        }

在MVC中的解决方法是:

1. 创建一个特性:

    public class AllowCrossSiteJsonAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
            base.OnActionExecuting(filterContext);
        }
    }

2. 使用这个特性:

        [AllowCrossSiteJson]
        public JsonResult YourMethod()
        {
            Test t = new Test { Name="aaa",Value="bbb"};
            return Json(t,JsonRequestBehavior.AllowGet);
        }

 

使用Jquery访问代码如:

 

    <script>
    $(document).ready(function(){
      $("button").click(function(){
        $.ajax({
            type:"Get",
            url:"http://localhost:25833/Home/YourMethod",
            dataType: "json",
            success: function (result){
                alert("数据:" + result.Name + "\n状态:" + status);
             }
        });
      });
    });
    </script>

通过上述设置之后可以在IE、火狐、谷歌下面顺利访问。

 

posted @ 2015-09-05 21:30  石曼迪  Views(617)  Comments(0Edit  收藏  举报
瓴域建设-环保事业中心