Странно, < em>только у метода входа в систему есть эта проблема: если я открою Postman и сделаю запрос к одному из других методов API, он вернет 401 Unauthorized (как и ожидалось, поскольку я не вошел в систему). Итак, я знаю, что у меня правильный URL-адрес, но он все равно возвращает 404.
Метод Login написан точно так же, как и другие методы, единственная разница, которую я вижу. в том, что в атрибутах указано [AllowAnonymous] вместо [Authorize].
Другая странность, которую я заметил, заключается в том, что это занимает довольно много времени (~ 30 секунд). ), прежде чем он вернет ошибку 404. Запросы к другим контроллерам не имеют такой же задержки.
Все это не имеет никакого смысла — почему этот метод терпит неудачу, когда другой метод на том же контроллере маршрутизируется правильно ? Почему ошибка 404? И почему это работает на моем локальном компьютере?
Контроллер входа:
Код: Выделить всё
[Produces("application/json")]
[Route("api/[controller]")]
public class LoginController : Controller
{
private readonly ILoginService _service;
private readonly CustomTokenOptions _tokenOptions;
private readonly IMemoryCache _memoryCache;
public LoginController(ILoginService service, IMemoryCache memoryCache, IConfiguration configuration)
{
_service = service;
_tokenOptions = new CustomTokenOptions();
configuration.GetSection("TokenAuthentication").Bind(_tokenOptions);
_memoryCache = memoryCache;
}
[AllowAnonymous]
[HttpPost("[action]")]
public IActionResult GetToken()
{
//Returns a JWT token
//This method returns a 404 Not Found
}
[Authorize(Policy="AllowedGroups")]
[HttpPost("[action]")]
public IActionResult Logout()
{
//This method works
}
}
Код: Выделить всё
var basePath = $("base").first().attr("href");
function login() {
$("#btnLogin").attr("disabled", true);
username = $("#username").val();
password = $("#password").val();
request = $.ajax({
url: basePath + "api/Login/GetToken",
async: true,
type: "POST",
headers: {
username: username,
password: password
}
});
function logout() {
request = $.ajax({
url: basePath + "api/Login/Logout",
async: true,
type: "POST",
headers: {
"Authorization": "Bearer " + self.token()
}
}).then(function () {
self.loggedIn(false);
self.token("");
});
}
- Удаление содержимого метода GetToken() и замена его возвращаемым StatusCode(200); Это означает, что внутри метода GetToken нет ничего, ответственного за ошибку.
- Комментирование операторов UseAuthentication и Authorize в моем коде. Ошибка по-прежнему возникает, когда аутентификация отключена.
- Переименование метода GetToken во что-то другое.
Подробнее здесь: https://stackoverflow.com/questions/493 ... -published
Мобильная версия