Я использую angular 4 с веб-API ASP.NET 2 на бэкэнде с включенной проверкой подлинности Windows. У меня есть один пост и один получить API. ПОЛУЧИТЬ работает нормально. Но для POST я получаю эту ошибку
Ответ на предварительную проверку имеет неверный код состояния HTTP 401.
Это означает, что я получаю несанкционированную ошибку для метода OPTIONS, которая, как я знаю, не должна иметь место, потому что метод OPTIONS никогда не вызывается с учетными данными пользователя.
в angular я вызываю API следующим образом
let requestOptions = new RequestOptions({
withCredentials: true,
headers: new Headers({
'content-type': 'application/json'
})
})
this.http.post("someapiendpoint", JSON.stringify(data), requestOptions).subscribe(data => {
debugger;
});
Я установил весь заголовок CORS в своей веб-конфигурации следующим образом
<add name="Access-Control-Expose-Headers " value="WWW-Authenticate"/>
<add name="Access-Control-Allow-Origin" value="http://localhost:4200" />
<add name="Access-Control-Allow-Headers" value="accept, authorization, Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
<add name="Access-Control-Allow-Credentials" value="true" />
Также у меня есть следующий в моем блоке аутентификации web.config
<authentication>
<anonymousAuthentication enabled="false" userName="" />
<basicAuthentication enabled="false" />
<clientCertificateMappingAuthentication enabled="false" />
<digestAuthentication enabled="false" />
<iisClientCertificateMappingAuthentication enabled="false">
</iisClientCertificateMappingAuthentication>
<windowsAuthentication enabled="true">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
я пытался удалить
headers: new Headers({
'content-type': 'application/json'
})
Ниже приведен код моего контроллера для веб-API.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
namespace Backend.Controllers
{
public class DemoController : ApiController
{
Entities db = new Entities();
public DemoController ()
{
}
[HttpPost]
[ActionName("postevent")]
public IHttpActionResult PostEvent(Demo data)
{
db.Demos.Add(data);
db.SaveChanges();
return Ok();
}
}
}
из моего углового кода, но это не помогло. Я также пытался заменить его на «text/html», но это тоже не сработало. Может ли кто-нибудь сказать мне, что я делаю неправильно. Как я предполагаю, он должен работать нормально, если он работает для GET.
[HttpPost]
. - person Bailey Miller   schedule 04.08.2017