2017-01-20 12 views
1

Здесь ошибка я получаю:Как получить сообщение http для отправки данных на бэкэнд. передний конец угловой 2 и Бэкэнд .net 5

XMLHttpRequest не может загрузить «http://localhost:49873/api/home». Ответ на запрос предварительной проверки не проходит проверку контроля доступа: Нет Заголовок «Access-Control-Allow-Origin» присутствует на запрошенном ресурсе . Поэтому 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

Вы включили CORS в настройку HttpConfiguration для WebApi? Я считаю, что вам нужно явно включить его для работы атрибутов контроллера.

var config = new HttpConfiguration(); 
config.EnableCors(); 

Или вы можете включить его в глобальном масштабе.

var config = new HttpConfiguration(); 
config.EnableCors(new EnableCorsAttribute("http://localhost:3000", "*", "*")); 

Надеюсь, это поможет.

Update

Основываясь на 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 
} 

Кроме того, не уверен, если это поможет, но в документации на «методы:„получить, пост“» в нижнем регистре, но это не объясняет, почему метод получения тонкой работы ,

+0

Да, я разрешил это. странно, что методы GET работают, но POST отказывается работать. – Ghsialin

+0

Я обновил свой ответ –