我有一个asp.net应用程序,其URL为“mysite.com”,我有一个子域“static.mysite.com”,它托管静态资源(图像,css和js文件)。
我希望这些资源只能从“mysite.com”和“static.mysite.com”访问。我的意思是其他人不应该从他/她的网站上反馈我的资源。
怎么可能?
问候。
答案 0 :(得分:1)
如果您有权访问服务器IIS,最简单的方法是在IIS中为未知请求设置过滤器。但是当你使用asp.net MVC和.net 4或更高版本(?)(可以在.net 4及更高版本中请求静态文件)时,你可以通过在asp.net MVC中启用CORS来实现:
public static void Register(HttpConfiguration config)
{
config.EnableCors();
config.Routes.MapHttpRoute(
"DefaultName",
"{controller}/{id}",
new { id = RouteParameter.Optional }
);
}
EnableCORS为您提供跨所有类型请求的原点,例如:
[EnableCors(origins: "http://www.Domain.com", headers: "*", methods: "*")]
所以,如果你想禁止所有未知的资源访问,你可以通过定义来源拒绝所有请求:
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false)]
public class MyCorsPolicyAttribute : Attribute, ICorsPolicyProvider
{
private CorsPolicy _policy;
public MyCorsPolicyAttribute()
{
// Create a CORS policy.
_policy = new CorsPolicy
{
AllowAnyMethod = true,
AllowAnyHeader = true
};
// Add allowed origins.
_policy.Origins.Add("http://subdomain.domain.com");
_policy.Origins.Add("http://www.domain.com");
}
public Task<CorsPolicy> GetCorsPolicyAsync(HttpRequestMessage request)
{
return Task.FromResult(_policy);
}
}
请参阅文章,因为我在解决问题时使用了它:
http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api