Доступ для загрузки по адресу «https://login.microsoftonline.com//oaut ... r=6.21.0.0» (перенаправлен с '') from origin '' заблокирован политикой CORS...
Насколько я понимаю, этого определенно не должно происходить (и не происходит кстати, происходят и при других действиях POST с тем же контроллером).
Я не понимаю, в чем проблема и как ее исправить.
Код: Выделить всё
[AllowAnonymous]
[ApiController]
[Route("api/[controller]")]
public class MembersController : ControllerBase
[HttpPost]
public async Task CreateMemberAsync(CreateMemberViewmodel model)
{
if (!model.IsValid(out List validationResult))
{
return BadRequest(new { Success = false, Errors = validationResult });
}
if (memberService.Exists(model, out Member _))
{
var failResult = new { Success = false, Errors = new List { new("Unable to create member; member already exists.") } };
return BadRequest(failResult);
}
var result = await memberService.CreateAsync(model, User);
return Ok(new { Success = true, Values = new [] { result }});
}
[HttpPost("Suggest")]
public async Task SuggestMembersAsync(CreateMemberViewmodel member)
{
var phoneNumberUtil = PhoneNumberUtil.GetInstance();
try
{
var phoneNumber = phoneNumberUtil.Parse(member.MobileTel, "ZA");
var intlFormat = phoneNumberUtil.Format(phoneNumber, PhoneNumberFormat.INTERNATIONAL);
member.MobileTel = intlFormat;
}
catch (NumberParseException)
{
var result = new { Success = false, Value = $"Unable to suggest members; submitted mobileTel is invalid: '{member.MobileTel}'"};
return BadRequest(result);
}
var members = await memberService.GetMembersAsync(o => o.OrderBy(x => x.Name));
members = members.Where(x =>
(x.Name.Trim() + " " + x.Surname.Trim()).ToLower().Contains((member.Name + " " + member.Surname).ToLower()) ||
x.Email.ToLower().Trim().Contains(member.Email.ToLower().Trim()) ||
x.MobileTel.Contains(member.MobileTel)
).ToList();
return Ok(new { Success = true, Values = members });
}
[HttpPost("Suggest")] действие, которое получает список участников, чьи PII совпадают с отправленными, работает, а метод [HttpPost], который все равно сохраняет нового участника, — нет.
Запросы на выборку JavaScript для этих действий в основном идентичны:
Код: Выделить всё
function getMemberSuggestions(member, containerParent) {
fetch(`https:///api/Members/Suggest`, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(member)
})
.then(res => res.json())
.then(data => {
...
})
function saveMember(member)
{
fetch(`https:///api/Members`, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(member)
})
.then(res => res.json())
.then(data => {
if (data.success) {
// Redirect to the Calendar with the new member preloaded.
location.href = `/Home/${data.values[0].id}`
}
else
{
console.error("Failed to save member.")
data.errors.forEach(error => console.error(error))
}
})
}
Я' Я добавил CORS в проект API:
Код: Выделить всё
services.AddCors(options =>
{
options.AddPolicy("SignalRPolicy",
builder => builder.AllowAnyMethod()
.AllowAnyHeader()
.WithOrigins(
"https://localhost:5001", // Self
"https://localhost:5003", // Bookings Portal
"https://localhost:7008", // Providers Portal
"https://localhost:7060", // Patients Portal
"https://localhost:7066", // Reports Portal
"https://localhost:7093", // Amani Portal
// Live URLs go here as well
)
.AllowCredentials());
});
Подробнее здесь: https://stackoverflow.com/questions/785 ... horization