asp.net关于如何准许api跨域访问

首先需要在原api接口的程序中在web.config添加如下节点(在<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>

在原api接口程序中的Global.asax中添加如下代码

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

具体是什么原因请自行百度 

然后需要在原api继承ApiController的控制器中添加如下代码

 //准许跨域请求
        public string Options()
        {
            return null; // HTTP 200 response with empty body
        }

  然后该项目发布就可以了

其它项目调用的时候这里举2个例子,一个是前台ajax调用,一个是后台调用

1.前台调用

 <script src="/jq/jquery-1.7.min.js"></script>
    <script type="text/javascript">
        window.onload = function get() {
            $.ajax({
                type: ‘GET‘,
                url: ‘http://网址/api/user/getInfo‘,
                dataType: ‘json‘,
                success: function (data, textStatus) {
                    //alert(data.Uid + " | " + data.UserName + "|" + data.Age);
                },
                error: function (xmlHttpRequest, textStatus, errorThrown) {
                }
            });
        }
    </script>

  2.后台调用

public static string request(string url)
        {
            string strURL = url;
            System.Net.HttpWebRequest request;
            request = (System.Net.HttpWebRequest)WebRequest.Create(strURL);
            request.Method = "GET";

            System.Net.HttpWebResponse response;
            response = (System.Net.HttpWebResponse)request.GetResponse();
            System.IO.Stream s;
            s = response.GetResponseStream();
            string StrDate = "";
            string strValue = "";
            StreamReader Reader = new StreamReader(s, Encoding.UTF8);
            while ((StrDate = Reader.ReadLine()) != null)
            {
                strValue += StrDate + "\r\n";
            }
            return strValue;
        }

  

 protected void Page_Load(object sender, EventArgs e)
        {
            string t = request("http://网址/api/user/getInfo");
            JsonData js = JsonMapper.ToObject(t);
            String name = (String)js["UserName"];
            Response.Write(name);
            //return Content(name);
        }

关于JsonData这里还需要添加一个引用LitJson.dll 

其实后台调用的话不需要在web.config和控制器中添加代码,直接就能调用,但需要在Global.asax中做配置

时间: 2024-08-29 19:10:20

asp.net关于如何准许api跨域访问的相关文章

Web Api跨域访问配置及调用示例

1.Web Api跨域访问配置. 在Web.config中的system.webServer内添加以下代码: <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> <add name="Access-Control-Allow-Headers" value="*" />

ASP.NET Web API 跨域访问

情景:http://localhost:8080/的web应用下访问http://localhost:8081下的Action时称为跨域访问. 前提,启动8080web应用实例,再启动8081web应用实例利用ajax去访问. 首先,在自己的Web API应用中,添加NuGet服务包,联机: 然后选择图中的,安装: 在Web API应用的App_Start/WebApiConfig.cs下的 public static void Register(HttpConfiguration config

ASP.NET Web API 跨域访问(CORS)要注意的地方

一.客户端用JSONP请求数据 如果你想用JSONP来获得跨域的数据,WebAPI本身是不支持javascript的callback的,它返回的JSON是这样的: {"YourSignature": "嫁人要嫁程序员,钱多话少死得早"} 然而,JSONP请求期望得到这样的JSON: jQuery123456({"YourSignature": "嫁人要嫁程序员,钱多话少死得早"}) 所以我们需要对WebAPI做拓展,让它支持这

Web API跨域访问

JS调用接口最需要注意的就是跨域问题 在.net平台下使js跨域变得非常简单 1.在nuget中引用 Microsoft ASP.NET Web API 2.2 Cross-Origin Support 包 2.再 Application_Start() 中加入 //跨域 GlobalConfiguration.Configuration.EnableCors(); 3.在 web.config 中设置权限 <system.webServer>  节点下  <httpProtocol&g

asp.net core 系列之允许跨域访问-1(Enable Cross-Origin Requests:CORS)

接上篇的允许跨域 4.CORS 策略(Policy)的选项 这里讲解Policy可以设置的选项: 设置允许的访问源 设置允许的HTTP methods 设置允许的请求头(request header) 设置暴露的响应头(response header) 跨不同源请求的证书(Credentials) 设置过期时间 AddPolicy 在StartUp.ConfigureServices方法中调用:对于一些选项,先阅读一下,CORS是怎么工作的,可能会有帮助 设置允许的源(Origins) Allo

asp.net core 系列之允许跨域访问2之测试跨域(Enable Cross-Origin Requests:CORS)

这一节主要讲如何测试跨域问题 你可以直接在官网下载示例代码,也可以自己写,我这里直接使用官网样例进行演示 样例代码下载: Cors 一.提供服务方,这里使用的是API 1.创建一个API项目.或者直接下载样例代码 2.像之前讲的那样设置允许CORS,例如: public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExce

Flask提供json api跨域访问,ajax接收json数据

ajax在判断请求成功时会判断返回的数据是否为json,需要将response的content-type设置为application/json,数据为标准的json格式 jQuery版本 <script src="https://cdn.bootcss.com/bootstrap/4.0.0-beta/js/bootstrap.min.js"></script> flask代码示例 @app.route('/test',methods=['GET','POST'

如何让你的 Asp.Net Web Api 接口,拥抱支持跨域访问。

由于 web api 项目通常是被做成了一个独立站点,来提供数据,在做web api 项目的时候,不免前端会遇到跨域访问接口的问题. 刚开始没做任何处理,用jsonp的方式调用 web api 接口,总是报一个错误,如下: 如果你想用JSONP来获得跨域的数据,WebAPI本身是不支持javascript的callback的,它返回的JSON是这样的: {"YourSignature":"嫁人要嫁程序员,钱多话少死得早"} 然而,JSONP请求期望得到这样的JSON

支持Ajax跨域访问ASP.NET Web Api 2(Cors)的简单示例教程演示

随着深入使用ASP.NET Web Api,我们可能会在项目中考虑将前端的业务分得更细.比如前端项目使用Angularjs的框架来做UI,而数据则由另一个Web Api 的网站项目来支撑.注意,这里是两个Web网站项目了,前端项目主要负责界面的呈现和一些前端的相应业务逻辑处理,而Web Api则负责提供数据. 这样问题就来了,如果前端通过ajax访问Web Api项目话,就涉及到跨域了.我们知道,如果直接访问,正常情况下Web Api是不允许这样做的,这涉及到安全问题.所以,今天我们这篇文章的主