2014-09-02 21 views
1

所以这是不安全的,并不是我最喜欢的选项,但我只是想知道它有多可能。有没有一种方法可以在cors请求中找到主机,以便我可以发回Access-Control-Allow-Origin:“domain.com”,其中domain是使用api的任何域。原因是我希望能够使用基本上通配符的“凭证”。使用MVC网页api,我可以找出域名cors请求

我可以让我的最终用户发送给我他们的主机名,但如果可能的话我宁愿从请求本身中提取它。

回答

2

其可能的,假设你正在使用的Microsoft.AspNet.WebApi.Cors在您的API使CORS,你需要定义自己的一个Cors策略提供者:

public class MyApiCorsPolicy : Attribute, ICorsPolicyProvider 
{ 
    private System.Web.Cors.CorsPolicy _policy; 

    public MyApiCorsPolicy() 
    { 
    // Create a CORS policy. 
    _policy = new System.Web.Cors.CorsPolicy 
    { 
     AllowAnyMethod = true, 
     AllowAnyHeader = true, 
     SupportsCredentials = true 
    }; 
    } 

    public Task<System.Web.Cors.CorsPolicy> GetCorsPolicyAsync(System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) 
    { 
    // Add the Request origin to the response. 
    _policy.Origins.Add(request.GetCorsRequestContext().Origin); 
    return Task.FromResult<System.Web.Cors.CorsPolicy>(_policy); 
    } 
} 

接下来,在你的ASP.NET网页API配置代码,您需要在启用Cors时通过此政策:

config.EnableCors(new MyApiCorsPolicy()); 
+0

完美谢谢。 – 2014-09-03 17:13:04