Използвам angular 4 с ASP.NET web api 2 на бекенда с активирано удостоверяване на Windows. Имам една публикация и един get api. GET работи добре. Но за 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