利用Owin解决CORS报错问题
我的项目是vue + ASP.NET 。在 Vue调试时,由于vue开启的调试用的服务器端口号 和 后台.NET程序的端口号是不同的,发送Ajax请求时,就会报错。这里就不提报错的原因了,网上有很多,基本的解决方法就是为对应的Action添加Header,比如以下代码:
public ActionResult MeetingList() {
Response.AppendHeader("Access-Control-Allow-Origin", "*");
Response.Headers.Add("Access-Control-Allow-Headers", "x-requested-with,content-type");
if (Request.HttpMethod.Equals("Options", StringComparison.OrdinalIgnoreCase))
{
return new EmptyResult();
}
var meetingList = _meetingRepository.GetMeetings();
var MeetingDtoList = Mapper.Map<List<MeetingSelectDto>>(meetingList);
return Json(MeetingDtoList, JsonRequestBehavior.AllowGet);
}
原理虽然如此,但是要为每一个Action都添加这样的代码,太不友好了。
这时可以使用Owin 的管道提前处理每一个请求,关于Owin,又是一个大话题,请自行google。
这里给一个自己写Owin中间件的教程链接 http://www.cnblogs.com/gaobing/p/5076089.html
我根据上面的链接,写的代码如下:
namespace WebApplication1.Middleware
{
public class CORSMiddleware : OwinMiddleware
{
public CORSMiddleware(OwinMiddleware next) : base(next) { } public override Task Invoke(IOwinContext context)
{ context.Response.Headers.Add("Access-Control-Allow-Origin",new string[] { "*" }); context.Response.Headers.Add("Access-Control-Allow-Headers", new string[] { "x-requested-with,content-type" }); if (context.Request.Method.Equals("Options", StringComparison.OrdinalIgnoreCase))
{
return Task.FromResult<int>();
}
return Next.Invoke(context);
}
}
}
namespace WebApplication1.Middleware
{
public static class AppBuilderExtension
{
public static IAppBuilder UseCORS(this IAppBuilder builder)
{
return builder.Use<CORSMiddleware>(); } }
}
之后在Startup里调用 UseCORS函数就可以了!
利用Owin解决CORS报错问题的更多相关文章
- Idea使用记录--添加Problems&&解决Autowired报错could not autowire
今天在使用Idea的时候,发现Idea在整个每次找到错误代码非常不方便(Idea如果类中有错误,没有打开过类并不会提示,比如构建工程后缺少jar包问题).我想快速看到工程哪里出问题类似于eclipse ...
- [转]解决Maven报错"Plugin execution not covered by lifecycle configuration"
[转]解决Maven报错"Plugin execution not covered by lifecycle configuration" 导入Myabtis源码后,POM文件会报 ...
- 解决MySQL报错ERROR 2002 (HY000)【转】
今天在为新的业务线搭架数据库后,在启动的时候报错 root@qsbilldatahis-db01:/usr/local/mysql/bin# ./mysql ERROR 2002 (HY000): C ...
- vue解决启动报错cjs loader.js Error: Cannot find module '../config'问题
vue解决启动报错cjs loader.js Error: Cannot find module '../config'问题 今天下载了一个开源项目一直运行不了,折腾了半天才找到问题所在,config ...
- 解决 php 报错 open_basedir restriction in effect或者nginx提示No input file specified怎么办
解决 php 报错 open_basedir restriction in effect或者nginx提示No input file specified怎么办 问题是出现在了PHP.INI上面了 ,原 ...
- 解决MySQL报错:1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'informat
解决MySQL报错:1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'informat ...
- eclips中maven解决jsp报错的问题
加入如下的pom依赖: <!-- 解决jsp报错的依赖包第一个 --> <dependency> <groupId>javax.servlet</groupI ...
- 不修改系统日期和时间格式,解决Delphi报错提示 '****-**-**'is not a valid date and time
假如操作系统的日期格式不是yyyy-MM-dd格式,而是用strtodate('2014-10-01')) 来转换的话,程序会提示爆粗 '****-**-**'is not a valid date ...
- Git fetch和git pull的区别, 解决Git报错:error: You have not concluded your merge (MERGE_HEAD exists).
Git fetch和git pull的区别, 解决Git报错:error: You have not concluded your merge (MERGE_HEAD exists). Git fet ...
随机推荐
- centos7之zabbix3.2代理(zabbix-proxy)搭建
zabbix的强大之处也在于它是分布式监控系统,对于多机房大集群情况下,肯定不是一台zabbix-server服务器来进行信息的收集等工作,就要用到代理了.在记录zabbix-proxy之前,要系统的 ...
- Leetcode 4.28 string
1. 38. Count and Say 就是对于前一个数,找出相同元素的个数,把个数和该元素存到新的string里.数量+字符 class Solution { public String coun ...
- python面试题整合
面试题整合 面试题—并发编程部分
- Excel中最精确的计算年龄的公式
身份证算年龄 假设A1是身份证号所在单元格 =IF(MONTH(NOW())<INT(MID(A1,11,2)),INT(YEAR(NOW())-INT(MID(A1,7,4)))-1,IF(M ...
- Re.FFT
前言 上虽然算是学过了但是实质上还是根本什么都不会 看大佬们的模板去A了模题(手动滑稽) 于是下定决心要理解FFT的代码 一些的证明主要是从算法导论和两位大佬的博客上学的 大佬1 大佬2 在这过程中 ...
- P4178 Tree(点分治)
题面要求小于等于K的路径数目,我么很自然的想到点分治(不会的就戳我) 这道题的统计答案与模板题不一样的地方是由等于K到小于等于K 那么我们可以把每一个子节点到当前根(重心)的距离排序,然后用类似双指针 ...
- ELK-filebeat收集日志到Kafka,并转存ES
https://blog.51cto.com/tryingstuff/2052271 场景需求 在有些不需要安装java环境的服务器如Nginx,php等为主的web 应用可以使用filebeat来对 ...
- 20175209 《Java程序设计》第八周学习总结
20175209 <Java程序设计>第八周学习总结 一.教材知识点总结 1.泛型 1.泛型类声明: 格式 class People<E> People是泛型类名称 E是泛型列 ...
- 常见的数据扩充(data augmentation)方法
G~L~M~R~S 一.data augmentation 常见的数据扩充(data augmentation)方法:文中图片均来自吴恩达教授的deeplearning.ai课程 1.Mirrorin ...
- JGUI源码:右键菜单实现(12)
1.要想实现右键菜单,就要先能响应右键函数 $('#down').mousedown(function(e){ if(3 == e.which){ alert('这是右键单击事件'); }else i ...