Запрос авторизации направлен на порт веб приложения
Есть проект, в котором два веб-приложения(Security и Web api). Они крутятся на IIS Express сервере при запуске в VS.
В Security проходит проверка логина и выдача токена. Приложение при запуске разворачивается по адресу http://localhost:37575/
При старте проекта, веб приложение расположенное по адресу http://localhost:37574/, начинает работу с авторизации. При отправке post-запроса (логин, пароль) происходит ошибка 404, а путь к контроллеру таков http://localhost:37574/token/password, то есть в root указан порт web-приложения, а не security-приложения.
Как я понимаю, то в связи с этим и ошибка 404. Он не может найти нужный контроллер? Потому что смотрит не тот порт и, следовательно, не в то приложение. В связи с этим вопрос, что необходимо отладить, чтобы была правильная адресация?
Нужный метод апи вызывается из приложения Security:
Есть [RoutePrefix("token")]
[RoutePrefix("token")]
public class TokenController : ApiController
{
private readonly IUserService _userService;
private readonly IActiveDirectoryService _adService;
private readonly IRefreshTokenService _refreshTokenService;
public TokenController(IUserService userService, IActiveDirectoryService adService, IRefreshTokenService refreshTokenService)
{
_userService = userService;
_adService = adService;
_refreshTokenService = refreshTokenService;
}
[Route("password")]
[HttpPost]
public TokenResult Password(PasswordModel model)
{
if (!ModelState.IsValid)
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState));
try
{
var user = _adService.Authenticate(model.Login, model.Password);
return CreateTokenResultFor(user);
}
catch (AuthenticationException ex)
{
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Forbidden, ex.Message));
}
}
В веб-контролере вызывается метод post:
authenticate(login: string, password: string) {
return this.$http.post<TokenResult>("security/token/password", { grant_type: "password", login: login, password: password }).then(response=> {
this.completeAuth(response.data, "password");
});
}
Пробовал ставить endpoint http://localhost:37575/security/token/password, но это не решило проблему.
Ответы (1 шт):
Изначально решение было настроено на работу сервера IIS, а не IIS Express. Тем самым с текущей конфигурацией требовалось разворачивать решение при наличии IIS. Для решения данной проблемы потребовалось развернуть IIS и после открыть решение. Visual Studio автоматически развернула проект, как надо.