AllowAnyMethod работает для некоторых вызовов API, но не для других - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть форма, упомянутая в этом вопросе , но когда я отправляю ее, я получаю

Блокировка перекрестного запроса: та же политика происхождения запрещает чтение удаленного ресурса вhttp://localhost:1113/api/loans. (причина: отсутствует заголовок CORS 'Access-Control-Allow-Origin').

и

Запрос перекрестного происхождения заблокирован: то же самоеПолитика происхождения запрещает чтение удаленного ресурса на http://localhost:1113/api/loans. (Причина: запрос CORS не был выполнен).

Ранее я исправил это для другого вызова API, добавив его в мой API Configure в Startup:

app.UseCors(options => options.WithOrigins("*").AllowAnyMethod());

Но теперь по какой-то причине он блокирует вызов, когда действие

// POST api/loans
[HttpPost]
public void Post(Loan loan)
{
    _context.Loans.Add(loan);
    _context.SaveChanges();
}

Почему?

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Это неопределенный вопрос, поэтому я дам несколько советов о том, что это может быть.

  1. Сначала начните с включения всех исключений. Есть вероятность, что вы получитеисключение до того, как произойдет cors, поэтому ваше приложение возвращает ответ об ошибке, прежде чем оно сможет добавить заголовки cors.

  2. .Net-Core требуют атрибута для разрешения того, как моделировать привязку данных.Таким образом, ваш метод HTTP post должен требовать атрибуты [FromForm] или [FromBody]

    [HttpPost]
    public void Post([FromForm] Loan loan)
    {
        _context.Loans.Add(loan);
        _context.SaveChanges();
    }
    
  3. Убедитесь, что вы действительно используете политику cors.Если вы не используете старую версию .Net Core, вам следует реализовывать политику cors из метода Configure Services, а не из метода configure

Попробуйте реализовать свою политику следующим образом:

services.AddCors(options =>
{
    options.AddPolicy(DEFAULT_POLICY_NAME, policy =>
    {
        policy.SetIsOriginAllowedToAllowWildcardSubdomains() 
             .AllowAnyOrigin()
             .AllowAnyHeader()
             .AllowAnyMethod()
             .AllowCredentials();
    });
});

Тогда в вашем методе настройки вы просто используете имя политики

app.UseCors(DEFAULT_POLICY_NAME);
0 голосов
/ 08 декабря 2018

Попробуйте использовать [FromBody]

public void Post([FromBody] Loan loan)

, также когда вы пытаетесь отправить, используйте JSON.stringify вместо modle напрямую,

this.http.post('http://localhost:1113/api/loans', JSON.stringify(this.model), config).subscribe(data => {
  console.log(data);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...