mvc跨域请求

mvc,web.api跨域。mvc主要用于搭建网站,webapi主要用于移动端请求接口。两者可以部署在一台服务器上。相同的域名,此时不存在跨域问题。当web.api域名不同时,就要跨域了。

跨域:在web.config的<system.webServer>下添加配置:

<httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="http(s):xxx.xxx.xxx" />
        <add name="Access-Control-Allow-Headers" value="content-type" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE,OPTIONS" />
        <add name="Access-Control-Allow-Credentials" value="true" />
      </customHeaders>
    </httpProtocol>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="WebDav" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>

淌的水,踩的坑:

1.属性写为<add name="Access-Control-Allow-Origin" value="*" />:找了一圈,设置为* 意思是允许任何网站跨域请求,但在项目中却总是失败。可能是公司项目有过特殊处理,所以导致不能这么用。注:接口是有权限验证的,不登录是不能请求接口的,所以安全性问题不大。这个问题需要自己搭建一套体系去验证验证。欢迎大家验证后分享

2.<add name="Access-Control-Allow-Headers" value="*" />这个也是真的坑,完全没想到这个居然也不行。

3.<remove name="OPTIONSVerbHandler" />,没有这个iis服务器不处理options请求。注:简单请求如get可以直接跨域请求接口。但post等复杂接口在跨域请求之前会先发起options请求访问服务器,接到response来判断是否也以跨域。

4.公司服务器有开发环境,测试环境,http\https。总不能全在web.config中写死吧(据说是有中间件的,通过简单的标签就能实现跨域),而且发版的时候还要分测试环境、开发环境、线上环境,太麻烦了。所以把“Access-Control-Allow-Headers”属性放到了全局文件Global.asax.cs中,动态配置跨域链接。

protected void Application_BeginRequest(object sender, EventArgs e)
        {
            var req = System.Web.HttpContext.Current.Request;
            if(Request.Headers.AllKeys.Contains("Origin"))
                Response.Headers.Set("Access-Control-Allow-Origin", Request.Headers.Get("Origin"));
            if (req.HttpMethod == "OPTIONS")//过滤options请求,用于js跨域
            {
                Response.StatusCode = 200;
                Response.SubStatusCode = 200;
                Response.End();
            }
        }

不过这样写后就相当于"Access-Control-Allow-Origin"属性设置成 "*"了。还需要更好的方法,欢迎大家留言献策。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值