zoukankan      html  css  js  c++  java
  • Ajax支持跨域之Web API实现

    Web开发中,常常会遇到跨域的问题,像这个样子

    园子里或者网上有各种解决办法示例,但是基本上照做下来都不会像示例当中那样顺利,至少我就是这样。。

    于是查找结合各种资料,外加亲自实践,终于完成了这个“亲测可用”的例子。

    本人文笔不咋地,更加别谈排版美化了,或许有些地方会表述的不清楚,但别慌,咱有源码献上 -:)

    文章中不会介绍概念,如 Access-Control-Allow-Origin,CORS等,因为这些网上一大把。

    测试环境:Windows10+VS2012+Microsoft.AspNet.WebApi.Cors5.2.3+jquery-1.8.2

    好了,先上图,看得更直观(图片比较大,可能需要等待一会才能看见..)

     

    细心的朋友可能发现了,图中客户端的 alert("成功")没有执行,是因为

    var resultstatus = json.Data.status;  status的首字母我写成小写了,因为返回的Json中是首字母是大写,正确的应该是
    var resultstatus = json.Data.Status;

    Ajax支持跨域实现步骤

    1.VS2012中创建ASP.NET MVC 4 Web 应用程序,选择项目模版Web API。

    2.添加引用 Microsoft.AspNet.WebApi.Cors

    添加方法一: 项目-引用-管理Nuget程序包-搜索”Microsoft.AspNet.WebApi.Cors“  安装

    添加方法二: 菜单“工具”,“Nuget程序包管理器”,“程序包管理器控制台”,然后在控制台输入命令行:Install-Package Microsoft.AspNet.WebApi.Cors

    3.服务端配置启用

    3.1 打开 App_Start/WebApiConfig.cs, 将代码config.EnableCors(); 添加到WebApiConfig.Register方法中

    public static void Register(HttpConfiguration config)
            {
                config.EnableCors();//启用Cors支持
                config.Formatters.Remove(config.Formatters.XmlFormatter); //WebApi默认返回数据格式为Xml,加了这句就可以返回Json啦
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                );
    
                // 取消注释下面的代码行可对具有 IQueryable 或 IQueryable<T> 返回类型的操作启用查询支持。
                // 若要避免处理意外查询或恶意查询,请使用 QueryableAttribute 上的验证设置来验证传入查询。
                // 有关详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=279712//config.EnableQuerySupport();
    
                // 若要在应用程序中禁用跟踪,请注释掉或删除以下代码行
                // 有关详细信息,请参阅: http://www.asp.net/web-api
                config.EnableSystemDiagnosticsTracing();
            }

    3.2 为控制器添加[EnableCors]属性代码:[EnableCors(origins: "*", headers: "*", methods: "*")]

             /*
                  * origins: "*",*是允许所有域名,可以指定只有特定域名,如* origins: "http://www.baidi.com"
             */
            [EnableCors(origins: "*", headers: "*", methods: "*")] 
            public JsonResult Get()
            {
                return new JsonResult { Data = new { Status = 1 } };
            }

    3.3.服务端配置完成后,先运行项目看看,大多数情况下都会报错,至少我是这样子。此时一般错误都是:

    XXX类型初始值设定项引发异常。

    XXX接口缺少缺少实现。

    XXX透明方法XXX等。

    这时,在程序包管理器控制台输入命令:Update-Package Microsoft.AspNet.WebApi -Pre

    等更新执行完成后,再实现一下接口,服务端就大功告成了。

    4.前端调用

    <script type="text/javascript">
        var url = "http://localhost:59377/api/values/";
        $.ajax({
            type: "get",
            url: url,
            dataType: 'json', 
            success: function(json) {
                var resultstatus = json.Data.Status;
                if (resultstatus == 1) {
                    alert("成功");
                } else if (resultstatus == 0) {
                    alert("失败");
                }
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
    
                alert(XMLHttpRequest.readyState + XMLHttpRequest.status + XMLHttpRequest.responseText);
            }
        });
    </script>

    分享是一件快乐的事;

  • 相关阅读:
    mysql 启动不了,报错InnoDB相关
    vue 根据屏幕大小重新加载 echarts
    echarts 图例样式
    canvas 创建的图表,在移动端时,手指触碰,无法上下滑动页面
    uni-app 左上角返回按钮消失
    uni-app 缓存无法读取问题
    hbuider 运行 uni-app PC使用安卓模拟器接口请求错误
    wbstrom 使用git提交代码
    后端路由正常,但页面空白
    算法——RSA算法原理(转)
  • 原文地址:https://www.cnblogs.com/jrsnd/p/4832865.html
Copyright © 2011-2022 走看看