API ASP .NET Core 3.1 перенаправляет на страницу входа в рабочую среду

Я создал веб-сайт ASP .NET Core 3.1, который использует MVC (по крайней мере, насколько я понимаю). Помимо страницы входа, я использую авторизацию файлов cookie для ограничения доступа. У одного из контроллеров есть действие, украшенное атрибутами [HttpPost] и [AllowAnonymous]. При запуске веб-сайта на моем компьютере все работает нормально, но когда я развертываю его на своем рабочем сервере (Server 2016 + IIS) и публикую действие с помощью Postman, я перенаправляюсь на страницу входа, и возвращается HTML страницы входа. . Остальная часть веб-сайта, вход в систему и т. д. Работает просто отлично. У меня проблемы только с API.

Я также пытался создать совершенно новый контроллер, используя шаблон из Visual Studio, но результат тот же. Удаление атрибута [Authorize] из контроллера также не изменило ситуацию.

Кто-нибудь знает, почему это может быть? Дайте мне знать, если отсутствует какая-либо информация, которая может вам понадобиться.

Мой контроллер (упрощенно)

[Authorize]
public class ApplicationController : Controller
{
...
    public async Task<IActionResult> Index([FromQuery] string searchTerms, [FromQuery] bool updateDb)
    {
        ...
        return View(vm);
    }

    [AllowAnonymous]
    [HttpPost]
    public string PostAction([FromBody] object postBody)
    {
        //Process data (JSON)
        return "SomeProcessedDataString";
    }
...
}

Материалы аутентификации файлов cookie в startup.cs

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddAuthentication("myCookieScheme")
                .AddCookie("myCookieScheme", (CookieAuthenticationOptions config) =>
                {
                    config.Cookie.Name = "myLoginCookie";
                    config.LoginPath = "/Home/Login";
                });
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            ...

            app.UseAuthentication();

            app.UseAuthorization();

            ...

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");

                endpoints.MapControllers();
            });

Спасибо.

Есть ли у вас services.AddAuthorization(...) в startup.cs и как это устроено?

Xerillio 14.12.2020 19:02

Только что посмотрел. У меня нигде в коде нет AddAuthorization, только AddAuthentication, UseAuthentication и UseAuthorization. Я только что попытался добавить services.AddAuthorization() (обратите внимание на конструктор по умолчанию), и он все тот же.

MondQ 14.12.2020 19:19

Вы настроили маршрутизацию конечных точек?

MultiValidation 14.12.2020 19:43

@PlamenYordanov Я добавил раздел app.UseEndpoints к своему исходному вопросу. Я использую маршрут по умолчанию, который поставляется с шаблоном MVC. В какой-то момент я также украсил свой ApplicationController атрибутами [ApiController] и [Route("[Controller]", а сами действия атрибутом [Route], но это тоже ничего не изменило.

MondQ 15.12.2020 10:54
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
372
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мне удалось решить проблему самостоятельно. Из-за настроек разрешений файловой системы на рабочем сервере действие POST выдавало ошибку, из-за чего ядро ​​ASP.NET перенаправлялось на страницу входа. Надеюсь, это поможет кому-то еще в будущем.

Другие вопросы по теме