原标题:ASP.NET MVC 中设置跨域

来源:GetPower

cnblogs.com/gdpw/p/9236661.html

程序员共读整理发布,转载请联系作者获得授权ASP.NET MVC中设置跨域 1、什么是跨域请求

js禁止向不是当前域名的网站发起一次ajax请求,即使成功respone了数据,但是你的js仍然会报错。这是JS的同源策略限制,JS控制的并不是我们网站编程出现了问题。

客户端(网页)和后台编程都可以有效解决这个问题。客户端可以通过JSONP来完成跨域访问;在ES6中为了解除同源策略问题,想出一个办法:当被请求网站为响应头respone添加了一个名为Access-Control-Allow-Origin的header,设置其值等于发起请求网站的域名地址的话,这次请求被视为允许。

其中Access-Control-Allow-Origin的值为*时表示允许所有网站的跨域请求。

2、程序中添加Header头允许客户端跨域请求

这里有很多方法可以方法可以在返回数据时添加header头。

请注意:同名Header可以有多个 ,但是运行时使用的是第一个,addHeader添加时,如果同名header已存在,则追加至原同名header后面(不起作用),setHeader,如果同名header已存在,则覆盖一个同名header。

在action中添加代码

HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Origin", "*");

在webconfig添加应用程序配置:

添加action过滤器

不论webapi还是mvc的action,我们都可以重写ActionFilterAttribute过滤器的OnException方法来在action执行完成之后,为http响应添加header头;OnException方法意为在action执行完成之后进行的操作。

这个过滤器可以添加在action或者controller上,但是这样就要为每一个action或者controller打上这个过滤器,这里将我们重写的action过滤器添加在了全局的过滤器中,这样,每一个action在执行完成之后都会触发这个过滤器,这里以webapi为例。新建类:

/// /// 跨域 /// public class Cores:ActionFilterAttribute { public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) { base.OnActionExecuted(actionExecutedContext); actionExecutedContext.Response.Headers.Add("Access-Control-Allow-Origin","*"); } }

代码中注册过滤器

public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API 配置和服务 // 将 Web API 配置为仅使用不记名令牌身份验证。 config.SuppressDefaultHostAuthentication(); config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); // Web API 路由 config.MapHttpAttributeRoutes(); config.Filters.Add(new Cores()); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }

在Starpup.cs类中设置header头

using System;using System.Collections.Generic;using System.Linq;using Microsoft.Owin;using Owin;using System.Web;[assembly: OwinStartup(typeof(WebApiTest.Startup))]namespace WebApiTest{ public partial class Startup { public void Configuration(IAppBuilder app) { // 不能使用这种方式添加必须使用app的相应方法或者中间件实现 // HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); //app.UseWebApi(); app.Use(async (context,next)=> { context.Response.Headers.Set("Access-Control-Allow-Origin", "*"); await next(); }); } }}

startup.cs类是应用启动类,我本来以为直接在方法中直接把HttpContext.Current.Response.AddHeader添加一个头就行了,但是发现不行,必须通过参数app才能成功设置响应头,后来我才知道,这个startup.cs类远不止看到的那么简单!拿出来可以当作好比一本书的一个章节来讲了!以后再深入了解这个类。

3、引入标签获取数据

一些JSONP之类的客户端跨域请求就不说了,最近发现了构造标签也可以作为获取数据的方法,很开心。

即使服务端不设置允许跨域的header头,js也可以变通获取数据,不过仍然需要服务端的配合。

这个原理是;当通过标签的src地址引入某个资源的JS代码的时候,就相当于src地址的JS代码直接就在本地一样。相应的,其他地址的js变量也会引入当前页面

比如百度地图的JsAPI

比如雅虎获取IP地址的接口

接口:http://pv.sohu.com/cityjson

返回JS代码:

var returnCitySN = {"cip": "115.238.95.194", "cid": "330100", "cname": "浙江省杭州市"};

页面引入

< src="http://pv.sohu.com/cityjson">>

然后console.log(returnCitySN)可以直接使用。

这就提供了思路,

var = document.(""),.src = "http://pv.sohu.com/cityjson";.=()=>{console.log(returnCitySN);}

但是缺点是,服务端必须返回的是JS代码。返回搜狐,查看更多

责任编辑:

html action能跨域么,ASP.NET MVC 中设置跨域相关推荐

  1. 关于AJAX跨域调用ASP.NET MVC或者WebAPI服务的问题及解决方案

    问题描述 当跨域(cross domain)调用ASP.NET MVC或者ASP.NET Web API编写的服务时,会发生无法访问的情况. 重现方式 使用模板创建一个最简单的ASP.NET Web ...

  2. 在ASP.NET MVC 中获取当前URL、controller、action

    在ASP.NET MVC 中获取当前URL.controller.action URL的获取很简单,ASP.NET通用: [1]获取 完整url  (协议名+域名+虚拟目录名+文件名+参数) stri ...

  3. ASP.NET MVC中你必须知道的13个扩展点

         ScottGu在其最新的博文中推荐了Simone Chiaretta的文章13 ASP.NET MVC extensibility points you have to know,该文章为我 ...

  4. 在 ASP.NET MVC 中使用 Chart 控件

    在 .NET 3.5 的时候,微软就提供了一个 Chart 控件,网络上有大量的关于在 VS2008 中使用这个控件的文章,在 VS2010 中,这个控件已经被集成到 ASP.NET 4.0 中,可以 ...

  5. 在ASP.NET MVC中使用IIS级别的URL Rewrite

    在ASP.NET MVC中使用IIS级别的URL Rewrite 原文 在ASP.NET MVC中使用IIS级别的URL Rewrite 大约一年半前,我在博客上写过一系列关于URL Rewrite的 ...

  6. ASP.NET MVC中实现多个按钮提交的几种方法

    有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能. 如果是用webform那不需要讨论,但asp.net mvc中一个表单只能提交到一个Action处理,相对比较 ...

  7. 在asp.net mvc中使用PartialView返回部分HTML段

    问题链接: MVC怎样实现异步调用输出HTML页面 该问题是个常见的 case, 故写篇文章用于提示新人. 在asp.net mvc中返回View时使用的是ViewResult,它继承自ViewRes ...

  8. Asp.Net MVC中的RenderPartial 和 RenderAction 【转】

    在Asp.Net MVC中要实现某个功能可以通过许多种方式,今天我们就来讨论下使用RenderPartial和RenderAction在视图中呈现部分内容之间的区别. 比如我们要呈现如下的图所示的内容 ...

  9. ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)

    AJAX的好处就是不会堵塞页面,可以提高用户体验,可以减少数据传输尺寸,提高应用程序的性能.目前,AJAX技术可以说是已经成为WEB开发的标准技术. AJAX技术是纯客户端技术,任何客户端框架(如:M ...

最新文章

  1. 在Ubuntu 14.04 64bit上安装Master PDF Editor 3.2.81
  2. SQL触发器实例(上)
  3. 无限互联新浪微博项目(视频)分享
  4. 为什么做了梦第二天想不起来_为什么做的梦总是想不起来?科学的解释是……...
  5. win8.1下无法运行vc++6.0的解决方法
  6. Android通用开发笔记和高性能安卓开发框架源码
  7. mysql ngram_MySQL ngram全文解析器
  8. java 获取插入数据的自增长id
  9. 【通信4.0 重新发明通信网】读后感
  10. Linux进程的管理与调度(四) -- Linux下的进程类别以及其创建方式
  11. snmp trap配置
  12. Typecho 插件开发基础
  13. 3G模块SIM5360E拨号上网
  14. Python实现历史记录功能
  15. 图片的毛玻璃效果学习
  16. 软件项目的规模、工作量和成本是如何进行估算的
  17. (CSP2019·J T4)加工零件【spfa】【最短路】
  18. 互联网创业盈利模式指南
  19. 变位词算法C语言,程序实现英语变位词的搜索算法
  20. Transformer Tracking

热门文章

  1. Register DLL and OCX
  2. SQL update 多表连接方法
  3. selenium 安装报错问题
  4. dataAdapter与dataSet和dataTable的填充
  5. jenkins集成sonar
  6. 关于Git和Github
  7. javascript Array类型 方法大全
  8. 团队工作-------step2
  9. 转:ubuntu或linux网卡配置/etc/network/interfaces
  10. index.dat文件剖析