我正在使用带有启用了Windows身份验证的ASP.NET Web API 2的Angular 4。我有一个POST和一个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标头设置在我的Web配置文件中,如下所示:
<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'
})
以下是我的 Web 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();
}
}
}
我尝试从我的Angular代码中使用它,但没有帮助。我还尝试将其替换为"text/html",但也不起作用。有人能告诉我我做错了什么吗?因为我认为如果GET能够正常工作,那么POST应该也能正常工作。
[HttpPost]
属性声明一个post方法。 - Bailey Miller