Почему мой API-контроллер AllowAnonymous направляет мой запрос через авторизацию?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Почему мой API-контроллер AllowAnonymous направляет мой запрос через авторизацию?

Сообщение Anonymous »

Я явно добавил аннотацию [AllowAnonymous] на уровне контроллера, потому что мне нужно, чтобы эта самая проблема не возникала, однако когда я отправляю сообщение на контроллер, я получаю ошибку CORS:

Доступ для загрузки по адресу «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 });
}
Для краткости я включил только два действия POST на контроллере.
[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());
});
И что же это дает? Как обойти эту проблему CORS?

Подробнее здесь: https://stackoverflow.com/questions/785 ... horization
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»