.net cros 跨域的坑

来源:互联网 发布:做数据库前景如何 编辑:程序博客网 时间:2024/06/06 09:54

Startup类中加入

public partial class Startup    {        public void Configuration(IAppBuilder app)        {            HttpConfiguration config = new HttpConfiguration();            ConfigureAuth(app);            string ff = ConfigurationManager.AppSettings["origins"];            config.EnableCors(new EnableCorsAttribute(ff, "*", "*"));            config.Services.Replace(typeof(IAssembliesResolver), new ExtendedDefaultAssembliesResolver());            config.MapHttpAttributeRoutes();            config.Routes.MapHttpRoute(                name: "DefaultApi",                routeTemplate: "api/{controller}/{id}",                defaults: new { id = RouteParameter.Optional }            );            app.UseWebApi(config);            var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();            jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();        }    }

可是加入了微软的identity后,验证时跨域还需要到ApplicationOAuthProvider加入这个方法

     private void setCrosUrl(OAuthGrantResourceOwnerCredentialsContext context)        {            string origin = context.Request.Headers["origin"];            if (ConfigurationManager.AppSettings["origins"].Contains(origin))            {                context.OwinContext.Response.Headers.Remove("Access-Control-Allow-Origin");                context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { origin });                context.OwinContext.Response.Headers.Add("Access-Control-Allow-Methods", new[] { "GET,POST,PUT" });            }        }

配置文件:

 <add key="origins" value="http://localhost:64737,http://localhost:56504" />