以下是我遇到的错误:
XMLHttpRequest无法加载“http://localhost:49873/api/home”。响应 预检请求未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许原点'// localhost:3000'访问。 响应的HTTP状态代码为400。
这是我的控制器:
[EnableCors(origins: "http://localhost:3000", headers: "Access-Control-Allow-Origin", methods: "GET, POST")]
public class HomeController : ApiController
{
[HttpPost]
public IHttpActionResult Post([FromBody] book inbook)
{
book fromangular = inbook;
var body = this.Request.Content.ReadAsAsync<book>();
return Ok(fromangular);
}
}
这是我的角度2代码:
postBook(inBook: book)
{
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
let x = JSON.stringify(inBook);
var res = this._http.post(booksUlr, x, { headers }).map((response:
Response ) => response.json()).subscribe();
return;
}
任何帮助将不胜感激。
答案 0 :(得分:0)
您是否在WebApi的HttpConfiguration上启用了CORS?我相信您需要明确启用它才能使Controller属性工作。
var config = new HttpConfiguration();
config.EnableCors();
或者您可以在全球范围内启用它。
var config = new HttpConfiguration();
config.EnableCors(new EnableCorsAttribute("http://localhost:3000", "*", "*"));
希望这有帮助。
<强>更新强>
基于documentation,尝试在声明属性时启用所有方法,然后禁用您不希望授予访问权限的特定操作。
例如
[EnableCors(origins: "http://localhost:3000", headers: "*", methods: "*")]
public class HomeController : ApiController
{
[HttpPost]
public IHttpActionResult Post([FromBody] book inbook)
{
book fromangular = inbook;
var body = this.Request.Content.ReadAsAsync<book>();
return Ok(fromangular);
}
[DisableCors]
// some action
}
另外,不确定这是否有帮助,但在文档中''方法:'获取,发布“'是小写的,但这并不能解释为什么get方法正常工作。