Причина вышесказанного относится к CORS (Cross Source Resource Sharing)
Есть несколько советов и приемов, доступных на множественных сайтах для CORS. Проверьте эти здесь
Есть несколько способов решения проблемы, давайте пройдемся по шагам.
1: Добавление следующих customHeaders в web.config сервера Web API.
<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" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customheaders>
</httpprotocol>
После добавления указанных выше ключей попробуйте запустить клиентское приложение, проблема не будет решена. Ошибка может быть замечена в Средстве разработчика> вкладка Консоли Chrome.
Если используется Internet Explorer 10 или 11, то на вкладке консоли отображается следующая ошибка.
XMLHttpRequest: Network Error 0x2efd, Could not complete the operation due to error 00002efd.
2: Удалите заголовки из файла web.config, упомянутого выше.
3: Ищите CORS в Управлении пакетами Nuget в Visual Studio, я использую VS 2013. Убедитесь, что на левой панели выбрано «Онлайн», и вы можете увидеть поддержку перекрестного происхождения Microsoft ASP.NET Web API 2.2 и установить ее. если не установлен Если такой же пакет уже установлен в вашем веб-API, то справа от него будет видна правая отметка в зеленом округленном круге.
4: Вначале мы упоминали, что при внедрении членства в аккаунте возникает ошибка. Теперь, чтобы решить проблему, добавьте следующую инструкцию использования в AccountController.
Атрибут может применяться на определенном уровне функции или для всех, как показано ниже:
[EnableCors(origins: "*", headers: "*", methods: "*")]
Приведенный выше атрибут в идеале должен располагаться чуть выше атрибута [Authorize].
5: Чтобы применить CORS ко всем контроллерам в Web API, в качестве первой строки в методе Register в WebApiConfig.cs можно указать следующее.
public static void Register(HttpConfiguration config)
{
config.EnableCors();
// Web API configuration and services
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
......
6: при реализации индивидуальной аутентификации с использованием базы данных членства шаблон в Visual Studio добавляет файл ApplicationOAuthProvider.cs. В этом файле есть один метод, который предоставляет учетные данные ресурса. Имя метода:
public override async Task GrantResourceOwnerCredentials
(OAuthGrantResourceOwnerCredentialsContext context)
В этом методе нужно проверить, добавлено ли что-нибудь подобное.
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin",
new[] { "yourdomain:yourpostnumber" });
Если это так и клиент пытается войти в систему, то на вкладке Консоль появляется следующая ошибка
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:53005' is therefore not allowed access. The response had HTTP status code 500.
Это потому, что мы уже включили config.EnableCors (); в WebApiConfig.cs, а также попробуйте добавить context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "yourdomain:yourpostnumber" });
Так что обязательно удалите context.OwinContext.Response.Headers.Add строку из файла ApplicationOAuthProvider.cs
и попробуйте. Ошибка не будет видна.
Также для дальнейшего ознакомления, пожалуйста, проверьте CORS ISSUE
Надеюсь, это поможет.