Действие контроллера Asp.NET Core возвращает 404 при публикацииC#

Место общения программистов C#
Ответить
Anonymous
 Действие контроллера Asp.NET Core возвращает 404 при публикации

Сообщение Anonymous »

У меня есть приложение ASP.NET Core, использующее MVC, и недавно я добавил в него аутентификацию. При локальном тестировании все работало нормально, но после того, как я опубликовал приложение и установил его на другой сервер, метод входа всегда возвращает ошибку 404.

Странно, < 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
Ответить

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

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

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

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

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