html action能跨域么,ASP.NET MVC 中设置跨域
原标题: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 中设置跨域相关推荐
- 关于AJAX跨域调用ASP.NET MVC或者WebAPI服务的问题及解决方案
问题描述 当跨域(cross domain)调用ASP.NET MVC或者ASP.NET Web API编写的服务时,会发生无法访问的情况. 重现方式 使用模板创建一个最简单的ASP.NET Web ...
- 在ASP.NET MVC 中获取当前URL、controller、action
在ASP.NET MVC 中获取当前URL.controller.action URL的获取很简单,ASP.NET通用: [1]获取 完整url (协议名+域名+虚拟目录名+文件名+参数) stri ...
- ASP.NET MVC中你必须知道的13个扩展点
ScottGu在其最新的博文中推荐了Simone Chiaretta的文章13 ASP.NET MVC extensibility points you have to know,该文章为我 ...
- 在 ASP.NET MVC 中使用 Chart 控件
在 .NET 3.5 的时候,微软就提供了一个 Chart 控件,网络上有大量的关于在 VS2008 中使用这个控件的文章,在 VS2010 中,这个控件已经被集成到 ASP.NET 4.0 中,可以 ...
- 在ASP.NET MVC中使用IIS级别的URL Rewrite
在ASP.NET MVC中使用IIS级别的URL Rewrite 原文 在ASP.NET MVC中使用IIS级别的URL Rewrite 大约一年半前,我在博客上写过一系列关于URL Rewrite的 ...
- ASP.NET MVC中实现多个按钮提交的几种方法
有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能. 如果是用webform那不需要讨论,但asp.net mvc中一个表单只能提交到一个Action处理,相对比较 ...
- 在asp.net mvc中使用PartialView返回部分HTML段
问题链接: MVC怎样实现异步调用输出HTML页面 该问题是个常见的 case, 故写篇文章用于提示新人. 在asp.net mvc中返回View时使用的是ViewResult,它继承自ViewRes ...
- Asp.Net MVC中的RenderPartial 和 RenderAction 【转】
在Asp.Net MVC中要实现某个功能可以通过许多种方式,今天我们就来讨论下使用RenderPartial和RenderAction在视图中呈现部分内容之间的区别. 比如我们要呈现如下的图所示的内容 ...
- ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)
AJAX的好处就是不会堵塞页面,可以提高用户体验,可以减少数据传输尺寸,提高应用程序的性能.目前,AJAX技术可以说是已经成为WEB开发的标准技术. AJAX技术是纯客户端技术,任何客户端框架(如:M ...
最新文章
- 在Ubuntu 14.04 64bit上安装Master PDF Editor 3.2.81
- SQL触发器实例(上)
- 无限互联新浪微博项目(视频)分享
- 为什么做了梦第二天想不起来_为什么做的梦总是想不起来?科学的解释是……...
- win8.1下无法运行vc++6.0的解决方法
- Android通用开发笔记和高性能安卓开发框架源码
- mysql ngram_MySQL ngram全文解析器
- java 获取插入数据的自增长id
- 【通信4.0 重新发明通信网】读后感
- Linux进程的管理与调度(四) -- Linux下的进程类别以及其创建方式
- snmp trap配置
- Typecho 插件开发基础
- 3G模块SIM5360E拨号上网
- Python实现历史记录功能
- 图片的毛玻璃效果学习
- 软件项目的规模、工作量和成本是如何进行估算的
- (CSP2019·J T4)加工零件【spfa】【最短路】
- 互联网创业盈利模式指南
- 变位词算法C语言,程序实现英语变位词的搜索算法
- Transformer Tracking