В нашем случае проблема была вызвана вызовом веб-службы с использованием метода запроса OPTIONS (вместо GET или POST).
Мы все еще не знаем, почему проблема внезапно появилась. Веб-служба работала в течение 5 лет отлично по HTTP и HTTPS. Мы единственные, кто потребляет веб-сервис, и он всегда использует POST.
Недавно мы решили сделать сайт, на котором размещен только веб-сервис SSL. Мы добавили правила перезаписи в Web.config, чтобы конвертировать что-либо HTTP в HTTPS, развернуто и сразу же начали получать, помимо обычных запросов GET и POST, запросов OPTIONS. Запросы OPTIONS вызвали ошибку, обсуждаемую на этом посту.
Остальная часть приложения работала отлично. Из-за этой проблемы мы продолжаем получать сотни сообщений об ошибках.
Существует несколько сообщений (например, this ), в которых обсуждается, как обращаться с методом OPTIONS. Мы отправились на обработку запроса OPTIONS непосредственно в Global.asax. Это затруднило проблему.
protected void Application_BeginRequest(object sender, EventArgs e)
{
var req = HttpContext.Current.Request;
var resp = HttpContext.Current.Response;
if (req.HttpMethod == "OPTIONS")
{
//These headers are handling the "pre-flight" OPTIONS call sent by the browser
resp.AddHeader("Access-Control-Allow-Methods", "GET, POST");
resp.AddHeader("Access-Control-Allow-Headers", "Origin, Content-Type, Accept, SOAPAction");
resp.AddHeader("Access-Control-Max-Age", "1728000");
resp.End();
}
}
Порядок имеет значение:
http ...
.antMatchers(HttpMethod.GET, "/api/appconsole/app/search").authenticated()
.antMatchers(HttpMethod.GET, "/api/appconsole/app/*").permitAll()