Веб-интерфейс ASP.NET или что-то еще?

Мне нужно сохранить некоторую информацию в сеансе (или в любом из ASP.NET Web API), который мне нужно получить в каждом запросе API. У нас будет один веб-сайт api IIS, а добавление нескольких веб-сайтов будет добавлено через заголовок хоста. Когда любой запрос приходит, например, api.xyz.com, заголовок хоста будет проверен и будет хранить информацию этого веб-сайта в сеансе, который будет использоваться в каждом последующем запросе api при совершении вызова в базу данных.

Я знаю, что поддержка ASP.NET Web API не поддерживается. Есть ли другой способ справиться с такой ситуацией? Где я могу хранить информацию, которую можно получить в каждом последующем запросе?

Благодарю.

Ну, REST по дизайну без гражданства. Добавляя сеанс (или что-нибудь еще такого рода), вы делаете его с сохранением состояния и побеждаете любую цель использования RESTful API.

Вся идея службы RESTful заключается в том, что каждый ресурс однозначно адресуется с использованием универсального синтаксиса для использования в гипермедиальных ссылках, и каждый HTTP-запрос должен содержать достаточно информации для своего получателя, чтобы обработать его, чтобы он полностью соответствовал природе безгражданства HTTP “ ,

Так что все, что вы пытаетесь сделать с помощью Web API здесь, скорее всего, будет реорганизовано, если вы хотите иметь RESTful API.

С учетом сказанного, если вы по-прежнему готовы пойти по этому маршруту, есть хакерский способ добавления сеанса к веб-API, и он был размещен Imran здесь http://forums.asp.net/t/1780385.aspx/ 1

Код (хотя я бы не рекомендовал это):

public class MyHttpControllerHandler : HttpControllerHandler, IRequiresSessionState { public MyHttpControllerHandler(RouteData routeData): base(routeData) { } } public class MyHttpControllerRouteHandler : HttpControllerRouteHandler { protected override IHttpHandler GetHttpHandler(RequestContext requestContext) { return new MyHttpControllerHandler(requestContext.RouteData); } } public class ValuesController : ApiController { public string GET(string input) { var session = HttpContext.Current.Session; if (session != null) { if (session["Time"] == null) { session["Time"] = DateTime.Now; } return "Session Time: " + session["Time"] + input; } return "Session is not availabe" + input; } } 

а затем добавьте HttpControllerHandler на ваш маршрут API:

 route.RouteHandler = new MyHttpControllerRouteHandler(); 

в Global.asax add

 public override void Init() { this.PostAuthenticateRequest += MvcApplication_PostAuthenticateRequest; base.Init(); } void MvcApplication_PostAuthenticateRequest(object sender, EventArgs e) { System.Web.HttpContext.Current.SetSessionStateBehavior( SessionStateBehavior.Required); } 

дать ему шанс 😉

В WebApi 2 вы можете добавить это в global.asax

 protected void Application_PostAuthorizeRequest() { System.Web.HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Required); } 

Затем вы можете получить доступ к сеансу через:

 HttpContext.Current.Session 

Вы можете использовать cookies, если данные достаточно малы и не представляют проблемы безопасности. Такой же подход HttpContext.Current должен работать.

Запрос и ответ HTTP-заголовки также могут использоваться для передачи информации между вызовами службы.

Теперь в 2017 году с помощью ASP.Net Core вы можете сделать это, как описано здесь.

Пакет Microsoft.AspNetCore.Session предоставляет промежуточное программное обеспечение для управления состоянием сеанса.

Startup.cs

 public void ConfigureServices(IServiceCollection services) { // Adds a default in-memory implementation of IDistributedCache. services.AddDistributedMemoryCache(); services.AddSession(options => { // Set a short timeout for easy testing. options.IdleTimeout = TimeSpan.FromSeconds(10); options.Cookie.HttpOnly = true; }); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseSession(); } 

Из Документов: Введение в состояние сеанса и приложения в ядре ASP.NET

Уже опробован на рабочий проект

  • Spring Framework 3 и атрибуты сеанса
  • Фиксация сеанса в ASP.NET
  • org.hibernate.LazyInitializationException - невозможно инициализировать прокси - нет сеанса
  • Срок службы сеанса symfony2
  • Преимущества Cache vs Session
  • ASP.NET MVC - сеанс имеет значение null
  • Как заставить пользователя регистрироваться на моем сайте в течение нескольких месяцев?
  • Почему бы не сгенерировать секретный ключ каждый раз, когда начинается фляжка?
  • Что делает атрибут crossContext в Tomcat? Включает ли это совместное использование сеанса?
  • Как установить тайм-аут сеанса в Laravel 4.2?
  • Сессия null в конструкторах диспетчера ASP.NET MVC
  • Interesting Posts

    Значения осей Excel X X

    Конкретный способ написания новых classов DialogPreference?

    Как удалить / полностью удалить Oracle 11g (клиент)?

    Создание карты :: поиск недействителен

    Импортирование вложенных пространств имен автоматически в C #

    Как сделать элемент выбора прозрачным в Chrome?

    Подclass MKAnnotationView и переопределение setDragState

    Заблокировано из Windows 10: логин больше не отображает «Администратор», а только учетную запись, которую я никогда не использовал

    Как обнаружить простые геометрические фигуры с помощью OpenCV

    Какая целочисленная hash-функция хороша, которая принимает целочисленный хеш-ключ?

    Как сериализовать статические элементы данных classа Java?

    Как переместить настольные компьютеры между мониторами и переупорядочить их в Windows 10?

    Как написать последовательность Фибоначчи?

    Как установить ключ CA (самоподписанный SSL) на ubuntu?

    как получить файл передачи между клиентом и сервером с помощью java socket

    Давайте будем гением компьютера.