zoukankan      html  css  js  c++  java
  • WebApi(3) 前端Jquery跨域访问 angular跨域访问

    终于在同事庆国的帮助下,搞定了一个心结。

    之前一直卡着是因为少了几个字母,word天啊,泪奔~~

    前端如果在一个项目中,端口和域名都一样是测试不出来的【不写跨域的代码也能过】。

    所以我分了另一个项目写前端页。

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     5     <title>跨域访问WebApi</title>
     6     <meta charset="utf-8" />
     7     <script src="../Scripts/jquery-1.10.2.min.js"></script>
     8     <script>
     9         var url = "http://localhost:5442/api/apidemo";
    10         $(function () {
    11             $("#div0").html(url);
    12         })
    13         function submitbtn() {
    14             $.ajax({
    15                 url: url + "/get/1",
    16                 type: "GET",
    17                 success: function (data) {
    18                     $("#div1").html(data);
    19                 }
    20             });
    21         }
    22         function submitbtn2() {
    23             $.getJSON(url + "/get2/1", function (data) {
    24                 $("#div1").html(data);
    25             })
    26         }
    27     </script>
    28 </head>
    29 <body>
    30     <div>
    31         <div id="div0">URL</div>
    32         <div id="div1">输出</div>
    33         <input type="button" value="获取get方法" onclick="submitbtn()" />
    34         <input type="button" value="获取get2方法" onclick="submitbtn2()" />
    35     </div>
    36 </body>
    37 </html>

    后台,webapi方法在WebApi 4大方法初探 get、post、put、delete中已经写过了。

    只写一下跨域的类。

    namespace WebApi2017.Controllers
    {
        public class CrossSite : System.Web.Http.Filters.ActionFilterAttribute
        {
            /// <summary>
            /// Access-Control-Allow-Origin是HTML5中定义的一种服务器端返回Response header,用来解决资源(比如字体)的跨域权限问题。
            /// </summary>
            private const string AccessControlAllowOrigin = "Access-Control-Allow-Origin";
            /// <summary>
            ///  originHeaderdefault的值可以使 URL 或 *,如果是 URL 则只会允许来自该 URL 的请求,* 则允许任何域的请求
            /// </summary>
            private const string originHeaderdefault = "*";
            /// <summary>
            /// 该方法允许api支持跨域调用
            /// </summary>
            /// <param name="actionExecutedContext"> 初始化 System.Web.Http.Filters.HttpActionExecutedContext 类的新实例。</param>
            public override void OnActionExecuted(System.Web.Http.Filters.HttpActionExecutedContext actionExecutedContext)
            {
                actionExecutedContext.Response.Headers.Add(AccessControlAllowOrigin, originHeaderdefault);
            }
        }
    }

    这里是用的System.Web.Http.Filters.ActionFilterAttribute,我还特意用了一下System.Web.Mvc.ActionFilterAttribute 结果不运行

    MVC的ActionFilterAttribute  看来不适合webapi,webapi是http协议,也不知道想的对不对,有不对的请大神指正。

    新增angular 4.3 httpclient 跨域访问:


    webapi后端的跨跨还要需一些设置,原来的头文件的访问,在angular上不能完全能过。


    "Microsoft.AspNet.WebApi.Cors" 引入nuget包

    具说Microsoft.AspNet.WebApi.Cors 可以解决jquery 和angular访问的所有问题,大家有兴趣可以试一下。

  • 相关阅读:
    Android服务之bindService源代码分析
    [iOS 高级] iOS远程推送与本地推送大致流程
    redis集群
    面试你之前,我希望在简历上看到这些!
    解决安卓出现导入第三方包反复的错误
    【PA2012】【BZOJ4289】Tax
    Spark jdbc postgresql数据库连接和写入操作源代码解读
    Java中hashcode的理解
    CvArr、Mat、CvMat、IplImage、BYTE转换
    CSDN日报20170413 ——《天天写业务代码的那些年,我们是怎样成长过来的》
  • 原文地址:https://www.cnblogs.com/cxd1008/p/6434052.html
Copyright © 2011-2022 走看看