Я создал веб-сайт 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();
});
Спасибо.
Только что посмотрел. У меня нигде в коде нет AddAuthorization, только AddAuthentication
, UseAuthentication
и UseAuthorization
. Я только что попытался добавить services.AddAuthorization()
(обратите внимание на конструктор по умолчанию), и он все тот же.
Вы настроили маршрутизацию конечных точек?
@PlamenYordanov Я добавил раздел app.UseEndpoints
к своему исходному вопросу. Я использую маршрут по умолчанию, который поставляется с шаблоном MVC. В какой-то момент я также украсил свой ApplicationController атрибутами [ApiController]
и [Route("[Controller]"
, а сами действия атрибутом [Route]
, но это тоже ничего не изменило.
Мне удалось решить проблему самостоятельно. Из-за настроек разрешений файловой системы на рабочем сервере действие POST выдавало ошибку, из-за чего ядро ASP.NET перенаправлялось на страницу входа. Надеюсь, это поможет кому-то еще в будущем.
Есть ли у вас
services.AddAuthorization(...)
вstartup.cs
и как это устроено?