В настоящее время я пишу угловое приложение, которое сообщается с серверной частью, разработанной с помощью Web API 2.
Иногда я хочу добавить определенный заголовок в ответ на запрос. Я включил CORS.
Когда вызов сделан из того же источника, нет проблем, значение находится в заголовке ответа, и я могу угрожать ему в угловой части. Когда вызов сделан из другого источника, имя заголовка недоступно в ответе.
В обоих случаях, когда я проверяю запросы с помощью инструментов разработчика в Chrome, я вижу заголовки в ответе.
Есть идеи, что я делаю неправильно? Есть ли что-то особенное в части Angular?
В целях тестирования я просто делаю это в веб-API:
public static void Register(HttpConfiguration config)
{
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
.....
// rest of the implementation (Routes, etc...)
}
ОБНОВЛЕНИЕ
Я написал ICorsPolicyProvider :
public class IkCorsPolicyProvider : ICorsPolicyProvider
{
private CorsPolicy CreateCorsPolicy()
{
CorsPolicy policy = new CorsPolicy
{
AllowAnyMethod = true,
AllowAnyHeader = false,
AllowAnyOrigin = false
};
// Some code to get the client allowed origins
//.....
//
// set the allowed origins to the policy
foreach (string allowedOrigin in allowedOrigins)
{
policy.Origins.Add(allowedOrigin);
}
policy.Headers.Add("content-type");
policy.Headers.Add(UserContext.Key);
policy.ExposedHeaders.Add("content-type");
policy.ExposedHeaders.Add(UserContext.Key);
return policy;
}
public Task<CorsPolicy> GetCorsPolicyAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
CorsPolicy policy = CreateCorsPolicy();
return Task.FromResult(policy);
}
}
Затем в Регистре:
public static void Register(HttpConfiguration config)
{
config.EnableCors(new IkCorsPolicyProvider());
.....
// rest of the implementation (Routes, etc...)
}