Я работаю над ASP. NET MVC-приложением, которое будет принимать запросы на вход с разных сайтов с различными конфигурациями (поэтому я не могу использовать способ SSO FormsAuthentication). То, как я решил это решить, было создание токенов входа для временного входа, поэтому каждый токен можно использовать только один раз, и с этими токенами приложение будет выполнять сеанс пользователя.Веб-API и MVC в том же проекте с состояниями сеанса
Чтобы избежать генерации токенов ненужно, я подумал о том, чтобы сначала спросить сервер, если пользователь не был уже зарегистрирован. И я решил попробовать это через HttpClient. Код написан следующим образом.
var client = new HttpClient { BaseAddress = new Uri("http://mywidget.com") };
client.Timeout = TimeSpan.FromMilliseconds(18000);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = client.GetAsync(String.Format("/userIsLogged/{0}", userId)).Result;
response.EnsureSuccessStatusCode();
bool isLogged = response.Content.ReadAsAsync<bool>().Result;
return isLogged;
Я пришел с двумя возможными способами, чтобы сделать проверку. Я написал одно и то же действие в Web API и MVC следующим образом.
[HttpGet]
public bool UserIsLogged(int userId)
{
return (HttpContext.Current.Session != null && ((int)HttpContext.Current.Session["userId"]) == userId);
}
С обоими я нашел проблемы, и я не знаю, какой сервер лучше для моих целей.
Действие MVC вернуло ответ как HTML, и клиент, очевидно, не смог обработать ответ, и я еще не нашел способ правильно его обработать.
Действие API может обрабатывать ответ, но Web API не обрабатывает состояния сеанса по умолчанию; вы должны настроить его так, чтобы он мог, и я не знаю, будут ли обе сессии одинаковыми.
Я не уверен, какой из них - правильный путь, или если я попробую другую альтернативу этой проблеме.
Thank you.
Спасибо. Это сработало! Вы были правы. Отправляя ответ как Json, ответ был доступен для чтения клиентом, хотя это был результат действия. Вы правы и о другом. Я начну посылать все как Json, и посмотреть, как это работает. –