Получается цену мне передавать не надо, а только список продуктовИменно. С фронта должны приходить id товаров и количество. Окончательный расчёт цены выполняет бэк. Он же формирует чек и отсылает его в платёжную систему, перебрасывая клиента на переданную страницу оплаты. И в бэк же возвращается callback от платёжной системы с подтверждением транзакции.
  
  
  
  1. При подключении проект никак не может найти файл google-services.json, не смотря на то, куда я его только не пихала. Он как находился в корневой папке проекта, как и в папке Android.для начала посмотрите свойства проекта и целевую папку компиляции (могут быть две - debug и release, на этапе разработки по дефолту debug). попробуйте положить туда.
копировать в выходной каталогесть слабое место. особенно в случае веб версии (если проект таковую допускает) - файл, возможно, содержит параметры доступа к базе?..
если шаблон проекта имеет свои конфигурационные паки изначально, значит просто надо скопировать в прототип этих папок в проекте (если их более одной - разобраться с назначением и выбрать подходящую), и ручками добавить файл в проект.. успехов!
@model UserRolesViewModel
@{
}
<div>
    <h1>@Model.UserName</h1>
    <div>
        <form asp-area="admin" asp-controller="Users" asp-action="AddRole" method="post" enctype="multipart/form-data">
            <input type="hidden" asp-for="@Model.Id" />
            <input type="hidden" asp-for="@Model.UserName" />
            @foreach (var key in Model.RoleChecked.Keys)
            {
                <div>
                    <label asp-for="RoleChecked[key]">@key</label>
                    <input type="checkbox" asp-for="RoleChecked[key]"/>
                </div>
            }
            <input type="submit" value="Accept" />
        </form>
    </div>
</div>public async Task<IActionResult> AddRole(Guid id, CancellationToken ct)
        {
            var user = await userMgr.FindByIdAsync(id.ToString());
            var model = new UserRolesViewModel();
            model.Id = id;
            model.UserName = user.UserName;
            model.RoleChecked = new Dictionary<string, bool>();
            foreach (var role in roleMgr.Roles)
            {
                if (await userMgr.IsInRoleAsync(user, role.Name))
                {
                    model.RoleChecked[role.Name] = true;
                }
                else
                {
                    model.RoleChecked[role.Name] = false;
                }
            }
            return await Task.Run(() => View(model), ct);
        }
        [HttpPost]
        public async Task<IActionResult> AddRole(UserRolesViewModel model, CancellationToken ct)
        {
            var user = await userMgr.FindByIdAsync(model.Id.ToString());
            if (ModelState.IsValid)
            {
                var inroles = new List<string>();
                var exroles = new List<string>();
                foreach (var rc in model.RoleChecked)
                {
                    if (rc.Value == false)
                        exroles.Add(rc.Key);
                    else
                        inroles.Add(rc.Key);
                }
                foreach (var role in exroles)
                {
                    await userMgr.RemoveFromRoleAsync(user, role);
                }
                foreach (var role in inroles)
                {
                    await userMgr.AddToRoleAsync(user, role);
                }
                return RedirectToAction(nameof(UsersController.User), nameof(UsersController).CutController(), new { area = "Admin", Id = user.Id });
            }
            return await Task.Run(() => View(model), ct);
        }public class UserRolesViewModel
    {
        [Required]
        [Display(Name = "Id")]
        public Guid Id { get; set; }
        [Required]
        [Display(Name = "User")]
        public string UserName { get; set; }
        [Required]
        [Display(Name = "Role")]
        public Dictionary<string, bool> RoleChecked { get; set; }
    }
  
  // ...
services.AddCors(options =>
{
    options.AddPolicy("AllowTeachToolClient",
        builder =>
        {
            builder.WithOrigins("http://localhost:3000", "https://localhost:3000");
            builder.AllowAnyHeader();
            builder.AllowAnyMethod();
        });
});
// ...SymmetricSecurityKey. Это для тех, кто захочет аналогично как я попробовать использовать что-то типа RSA(2048)Я не говорю, что они не работают, просто для начала с этим могут быть проблемы с реализацией
'Accept': '*/*',
'Host': 'http://localhost:3000',
'Content-Type': 'application/json',
'Authorization': 'Bearer {token}''Accept': '*/*',
'Host': "http://localhost:3000",
'Content-Type': 'application/json;'services.AddCors(options =>
{
    options.AddPolicy("AllowTeachToolClient",
        builder =>
        {
            builder.WithOrigins("http://localhost:3000");
            builder.AllowAnyHeader();
            builder.AllowAnyMethod();
        });
});app.UseAuthentication(); и app.UseAuthorization();. Вырезка с самого вопроса:var app = builder.Build();
app.UseCors("AllowTeachToolClient");
app.UseHttpsRedirection();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();
  
  
  
  
  
  В будущем я хотел бы попробовать сделать так, чтобы база была на каком-то сервере, чтобы многие могли пользоваться приложением, но не думаю, что это будет нормально работать, да и вообще не красиво( Заранее спасибо.