博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
webapi支持跨域访问
阅读量:6510 次
发布时间:2019-06-24

本文共 2558 字,大约阅读时间需要 8 分钟。

写在前面

在实际应用中,跨域请求还是比较常见的,如何上接口直接支持跨域的访问呢?

demo

场景项目A有个接口用来获取用户列表,现在项目b也有个功能需要加载用户列表。这两个项目在两个域名下,至少端口好不同。使用angularjs中的$http发起请求。

using Newtonsoft.Json;using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.Http;using System.Threading.Tasks;using System.Web.Http;namespace API.Controllers{    public class User    {        public int Id { set; get; }        public string Name { set; get; }        public DateTime Dt { set; get; }    }    public class UserController : ApiController    {        // GET: api/User        [HttpGet]        [Route("api/User/lists")]        public HttpResponseMessage Get()        {
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.NoContent); List
users = new List
{ new User { Id = 1, Name = "张三", Dt = DateTime.Now }, new User { Id = 2, Name = "李四", Dt = DateTime.Now } }; response = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(JsonConvert.SerializeObject(new { _code = 200, _data = users })) }; return response; } }}

首先用postman模拟请求,验证接口是正确的。

现在项目b想通过js来请求这个接口:

$http.get("http://localhost:49505/api/User/lists").success(function (response) { console.log(response); });

结果:

在webapi中为响应头加上允许跨域访问。如下所示

public class UserController : ApiController    {        // GET: api/User        [HttpGet]        [Route("api/User/lists")]        public HttpResponseMessage Get()        {
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.NoContent); List
users = new List
{ new User { Id = 1, Name = "张三", Dt = DateTime.Now }, new User { Id = 2, Name = "李四", Dt = DateTime.Now } }; response = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(JsonConvert.SerializeObject(new { _code = 200, _data = users })) }; response.Headers.Add("Access-Control-Allow-Origin", "*"); //允许哪些url可以跨域请求到本域 response.Headers.Add("Access-Control-Allow-Methods", "POST"); //允许的请求方法,一般是GET,POST,PUT,DELETE,OPTIONS response.Headers.Add("Access-Control-Allow-Headers", "x-requested-with,content-type"); //允许哪些请求头可以跨域 return response; } }

测试

$http({        method: 'get',        url: "http://localhost:49505/api/User/lists"    }).success(function (response) { console.log(response); });

结果

 

转载于:https://www.cnblogs.com/wolf-sun/p/5492050.html

你可能感兴趣的文章
数据库设计 Step by Step (6) —— 提取业务规则
查看>>
深入理解java异常处理机制
查看>>
Redis客户端redisson实战
查看>>
连接到 JasperReports Server
查看>>
java处理高并发高负载类网站问题
查看>>
使用C#生成随机密码(纯数字或字母)和随机卡号(数字与字母组合)
查看>>
CAS服务器端集群
查看>>
Android内存泄漏的常见场景及解决方案
查看>>
设计模式 之 访问者模式
查看>>
JAVA Collections框架
查看>>
更改Windwos server 2003 域用户密码策略默认配置
查看>>
网站白名单可行性分析
查看>>
进制转换
查看>>
反转字符串中的单词
查看>>
html与html5的一些区别
查看>>
ASCII码
查看>>
java常用四种排序源代码
查看>>
win7 下硬盘安装Redhat7
查看>>
js图表控件:highcharts的应用
查看>>
Redis 分布式锁的正确实现方式
查看>>