.NET中Ajax跨越访问

说明:我们知道Ajax是不能进行跨域请求的,我们是可以设置我们的项目让Ajax支持跨域访问。

跨域: aa.xxx.com 中用ajax请求  bb.ccc.com中的数据成为跨域。

找了一些文章看了的, 无非都是说 jsonp是get的解决办法,cross是post请求的解决办法。这边自己也测试了下。这边记录一下。

①我们先准备好我们的接口

然后需要我们发布一下,这个就是我们的接口地址了() :http://apitest.sealee.xin/api/ajaxcross (get/post(请求的body为: ‘{"Name":"sealee"}‘  json字符串 ))

http://apitest.sealee.xin/api/ajaxcross  如果出现下面信息证明接口有效,否则无效

②什么都不做处理进行Aajx请求

本机上创建一个页面,进行访问接口数据

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>测试Ajax跨越请求</title>
    <script src="~/Scripts/jquery-3.3.1.min.js"></script>
    <script src="~/Scripts/jquerycookie/jquery.cookie.js"></script>
    <script>
        $(document).ready(function () {
            $(‘#GetCross‘).bind(‘click‘, function () {
                var ob = {
                    name: "sealee"
                };
                $.ajax({
                    type: "get",
                    async: true,
                    url: "http://apitest.sealee.xin/api/AjaxCross",
                    dataType: "json",
                    beforeSend: function () {
                        //请求前的处理
                    },
                    success: function (data) {
                        //请求成功处理,和本地回调完全一样
                        console.log(data);
                    },
                    complete: function () {
                        //请求完成的处理
                    },
                    error: function () {
                        //请求出错处理
                    }
                });

            });
            $(‘#PostCross‘).bind(‘click‘, function () {
                var ob = {
                    Name: "sealee"
                };
                $.cookie("testCookie", "123456");
                $.ajax({
                    type: ‘POST‘,
                    headers: {
                        ‘contentType‘: "application/json; charset=utf-8"   //有头部信息会执行optings请求
                    },
                    //xhrFields: {
                    //    withCredentials: true // 这里设置了withCredentials  能不能传递cooikes
                    //},
                    url: "http://apitest.sealee.xin/api/AjaxCross",
                    dataType: "json",
                    data: JSON.stringify(ob),  //传递的json格式
                    success: function (data) {
                        console.log(data);
                    }
                })

            });

        });
    </script>
</head>
<body>
    <div>
        <button id="GetCross"> Get跨越</button>
        <button id="PostCross"> Post跨越</button>
    </div>
</body>
</html>

我们点击Get,Post都是会报错的

③解决办法   网上找了些方法,说需要 js和服务端都需要做改变,自己做了一些尝试,最后结果:我们保持我们的js代码不变,只是在服务端进行了配置,就可以实现跨域请求

在web.config里面配置了这些,也可以写个过滤器在代码里面进行添加,如果不安全,可以在头部设置一些信息来确保消息的请求来源。

1.写在web.config中

2.代码

然后再进行调试

跟踪我们的请求,你会发现,有三次请求

  

类型为OPTIONS的时候,只有当我们的ajax请求中出现了头部信息才会执行,当OPTIONS执行成功的时候才会去执行Post请求。

注释我们的头部请求设置,然后点击Post提交

问题:传递Cookie的时候cookie没有加到我们的头部

修改我们的配置:

JS:

原文地址:https://www.cnblogs.com/Sea1ee/p/9532587.html

时间: 2024-10-19 10:23:06

.NET中Ajax跨越访问的相关文章

js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)

最近做了一个项目,需要用子域名调用主域名下的一个现有的功能,于是想到了用jsonp来解决,在我们平常的项目中不乏有这种需求的朋友,于是记录下来以便以后查阅同时也希望能帮到大家,需要了解的朋友可以参考下 很庆幸,我又见到了末日后新升的太阳,所以我还能在这里写文章,言归正传哈,最近做了一个项目,需要用子域名调用主域名下的一个现有的功能,于是想到了用jsonp来解决,在我们平常的项目中不乏有这种需求的朋友,于是记录下来以便以后查阅同时也希望能帮到大家. 什么是JSONP协议? JSONP即JSON w

AJAX跨越访问解决方案

1.JSONP JSONP参考教材:http://kb.cnblogs.com/page/139725/ JSONP是利用HTML的script标签一下特性: 1)引用外部资源不受跨域问题影响 2)script标签加载完js资源后立马自动执行加载的js 3)新加载的js作用域为全局 script标签的src属性指向服务端动态生成js文件,该js文件的基本格式如下: callback(jsonData); 其中callback函数在客户端定义,名称不定,由script标签通过url传参传递到服务器

ASP.NET MVC中使用ASP.NET AJAX异步访问WebService

使用过ASP.NET AJAX的朋友都知道,怎么通过ASP.NET AJAX在客户端访问WebService,其实在ASP.NET MVC中使用ASP.NET AJAX异步访问WebService 也没什么大的差别. 在ASP.NET应用程序里使用ASP.NET AJAX访问WebService通常都是通过ScriptMananger引入WebService生成客户端代理的方法,同时也可以使用Microsoft Ajax Library来完成.本文将介绍在ASP.NET MVC中使用ASP.NE

解决ant Design dva ajax跨越请求 (status=0)

今天实现了antd作为前端展现,python flask作为后端的数据填充,完全两个独立的服务:过程中遇到ajax跨越请求问题,导致status一直等于0,原来是这么写的: xmlhttp.open("GET", "http://192.168.118.129:8001/test_react_action?user_name=" + values.userName, true); xmlhttp.send(); 被解析为跨越访问了,这个时候需要在dva中添加代理才能

JQuery中$.ajax()方法参数详解

url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 delete也可以使用,但仅部分浏览器支持. timeout: 要求为Number类型的参数,设置请求超时时间(毫秒).此设置将覆盖$.ajaxSetup()方法的全局设 置. async:要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求. 如果需要发送同步请求,请将此选项

jQuery中$.ajax()详解(转)

JQuery中$.ajax()方法参数详解     url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 delete也可以使用,但仅部分浏览器支持. timeout: 要求为Number类型的参数,设置请求超时时间(毫秒).此设置将覆盖$.ajaxSetup()方法的全局设 置. async:要求为Boolean类型的参数,默认设置为true,所有

通过jQuery或ScriptManager以Ajax方式访问服务

1.客户端和服务端 服务端对外提供服务时,可以通过handler或者webservice.handler比较轻便,但是难以对外公开,只有程序员自己知道它到底做了些什么工作.webservice可以将服务对外公开,调用也方便,更加专业些.如果不是要公开的接口,handler完全可以胜任了.下面是将webservice发布的效果. 客户端在调用服务端的服务时,最简单的莫过于使用jQuery了.当然微软也提供了ScriptMananger来访问WebService.他们之间的关系可以用下图说明. 2.

ajax的访问 WebService 的方法

转自原文 ajax的访问 WebService 的方法 如果想用ajax进行访问 首先在web.config里进行设置 添加在 <webServices> <protocols> <add name= "HttpPost" /> <add name= "HttpGet" /> </protocols> </webServices> <system.web>节点之下 这样就是可以通过u

关于jQuery中$.ajax()跨域

今天研究了一些用jquery $.ajax跨域的方法,总结了一些注意事项如下: 首先,跨域JSONP不是AJAX.它不使用XMLHttpRequest.只不过是一个动态脚本元素加载JavaScript代码. Cross-domain JSONP isn't AJAX at all. It doesn't use XMLHttpRequest. It's nothing more than a dynamic script element that loads JavaScript code. Y