zoukankan      html  css  js  c++  java
  • C# ASP.NET MVC 配置允许跨域访问

    在web.config文件中的 system.webServer 节点下 增加如下配置

    <httpProtocol>
          <customHeaders>
            <add name="Access-Control-Allow-Origin" value="*" />
            <add name="Access-Control-Allow-Headers" value="Content-Type" />
            <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
          </customHeaders>
        </httpProtocol>
    View Code
    <httpProtocol>
                <customHeaders>
                    <add name="Access-Control-Allow-Origin" value="*" />
                    <add name="Access-Control-Allow-Headers" value="*" />
                    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE" />
                </customHeaders>
            </httpProtocol>
    View Code

    在ASP.Net webapi中可以使用  Microsoft.AspNet.WebApi.Cors  来实现:

    public static class WebApiConfig
        {
            public static void Register(HttpConfiguration config)
            {
                // New code
                config.EnableCors();
    
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                );
            }
        }
    View Code
    [EnableCors(origins: "http://mywebclient.azurewebsites.net", headers: "*", methods: "*")]
        public class TestController : ApiController
        {
            // Controller methods not shown...
        }
    View Code

    但在MVC中不能使用这个,需要自定义一个类:

    public class AllowCrossSiteJsonAttribute: ActionFilterAttribute
        {
            private string[] _domains;
            public AllowCrossSiteJsonAttribute(string domain)
            {
                _domains= new string[] { domain };
            }
            public AllowCrossSiteJsonAttribute(string[] domains)
            {
                _domains = domains;
            }
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                var context = filterContext.RequestContext.HttpContext;
                var host = context.Request.UrlReferrer?.Host;
                if (host != null && _domains.Contains(host))
                {
                    filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
                }
                base.OnActionExecuting(filterContext);
            }
        }
    View Code

    在被访问的控制器上加上AllowCrossSiteJson:

    [AllowCrossSiteJson("localhost")]
            public JsonResult Index()
            {
                var holidays = new List<Holiday>
                {
                    new Holiday
                    {
                        Title="2 Weeks in Rhodes",
                        Price=688,
                        ImgUrl="http://media.wiley.com/product_data/coverImage/84/04702927/0470292784.jpg"
                    },
                    new Holiday
                    {
                        Title="1 Weeks in Barbados",
                        Price=320,
                        ImgUrl="http://media.wiley.com/product_data/coverImage/84/04702927/0470292784.jpg"
                    }
                };
                return Json(holidays, JsonRequestBehavior.AllowGet);
            }
    View Code

    https://www.cnblogs.com/uptothesky/p/6178787.html

  • 相关阅读:
    P1064 金明的预算方案
    P1062 数列
    P2258 子矩阵
    P1095 守望者的逃离
    P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers
    P1203 [USACO1.1]坏掉的项链Broken Necklace
    P1478 陶陶摘苹果(升级版)
    P2485 [SDOI2011]计算器
    逆元模板
    CloudStack 物理网络架构
  • 原文地址:https://www.cnblogs.com/love201314/p/9173523.html
Copyright © 2011-2022 走看看