Заголовок Access-Control-Allow-Origin имеет несколько значений или Preflight jQuery ajax для веб-Api 2
у меня есть asp.net веб-формы приложение работает на localhost:6414 затем jQuery ajax вызывает служба веб-Api on localhost: 11974
я получаю сообщение об ошибке
The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed. Origin 'http://localhost:6414' is therefore not allowed access.
поэтому я прочесываю google и stackoverflow и Т конфликта информация.
1. Fix with web.config
2. Fix with jquery ajax call
3. Fix with CORS in web.api
Я пробовал Cors включена и web.config и всякие методы.
в настоящее время мне интересно, является ли проблема на самом деле кодом jQuery веб-форм в качестве отправителя, но на самом деле заголовки ответов означают, что это от службы Web api...
я смотрю на мои заголовки ответов, и я вижу 2 из эти
Access-Control-Allow-Origin:* ( repeated TWICE)
я пытаюсь прокомментировать эту строку в интернете.config в проекте Web Api
<add name="Access-Control-Allow-Origin" value="*" />
тогда я получаю эту ошибку 401:
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:6414' is therefore not allowed access. The response had HTTP status code 401.
у меня есть этот код в web.config
<authentication mode="Windows" />
<authorization>
<allow verbs="OPTIONS" users="*" />
<deny users="?" />
</authorization>
теперь, если я раскомментировать the Доступ-Контроля.... в web.config а то комментарий на CORS код WebApiConfig.cs
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
если этот код закомментирован, я получаю ошибку предполетной подготовки
XMLHttpRequest cannot load http://localhost:11974/PostCheckBox. Response for preflight has invalid HTTP status code 405
это кажется совершенно безумным.
код Jquery
function sendCheckboxes(id, out, yes, no) {
//$(function () {
//var storm = { id: 1902, StormOut: 1, StormYes: 1, StormNo: 1 };
var storm = { id: id, StormOut: out, StormYes: yes, StormNo: no };
//jQuery.support.cors = true;
$.ajax({
type: "POST",
data: JSON.stringify(storm),
url: "http://localhost:11974/PostCheckBox",
contentType: "application/json",
//crossDomain: true,
success: function (data) {
console.log(data)
},
error: function (x, y, z) {
console.log(x + 'n' + y + 'n' + z);
}
});
//});
}
метод веб-api
[Route("PostCheckBox")]
public HttpResponseMessage PostCheckBox([FromBody] StormData storm)
{.... }
если я вызываю этот метод из того же домена (на данный момент тот же порт на localhost), он отлично работает
http://localhost:11974/checkbox.html
что дает...
2 ответов
вы боретесь свой web.config
прокомментируйте все дерьмо, которое вы добавили в интернет.конфиг!
<authentication mode="Windows" />
<authorization>
<allow verbs="OPTIONS" users="*" />
<deny users="?" />
</authorization>
Я не использую это, и я уверен, что это 1 выпуск Также другое, что вам нужно комментарий
<add name="Access-Control-Allow-Origin" value="*" />
а то ИСПОЛЬЗУЙТЕ эти строки
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
вы всегда можете добавить в безопасность, аутентификацию и авторизацию и иметь запрос специфики Cors не глобальный, а на класс или Метод, но если вам трудно просто заставить вещь работать, то это действительно должно работать.
включить cors при запуске.cs
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
ConfigureOAuth(app);
WebApiConfig.Register(config);
// Make sure this line is called before ConfigureAuth(app),
// app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWebApi(config);
}