У меня есть форма, указанная в этот вопрос, но когда я отправляю ее, я получаю
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:1113/api/loans. (Reason: CORS header 'Access-Control-Allow-Origin' missing).
и
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:1113/api/loans. (Reason: CORS request did not succeed).
Я исправил это для другого вызова 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();
}
Почему?





Попробуйте использовать [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.info(data);
});
Я попробовал JSON.stringify, но это не имело значения
могу я увидеть конфигурацию маршрута
У меня просто [Route("api/[controller]")] на моем контроллере
Это расплывчатый вопрос, поэтому я дам несколько советов, что это может быть.
Сначала начните с включения всех исключений Есть вероятность, что вы получите исключение до того, как произойдет cors, поэтому вы подаете заявку возвращает сообщение об ошибке, прежде чем сможет добавить заголовки cors.
.Net-Core требует атрибута для определения способа привязки данных модели. Итак, ваш метод HTTP-публикации должен требовать атрибуты [FromForm] или [FromBody].
[HttpPost]
public void Post([FromForm] Loan loan)
{
_context.Loans.Add(loan);
_context.SaveChanges();
}
Убедитесь, что вы действительно используете свою политику 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);
Это не имело значения - похоже, просмотр в инкогнио тоже не помогает