Ответ 1
Ну, REST по дизайну без гражданства. Добавляя сеанс (или что-либо еще такого рода), вы делаете его с сохранением состояния и побеждаете любую цель иметь RESTful API.
Вся идея службы RESTful заключается в том, что каждый ресурс однозначно адресуется с использованием универсального синтаксиса для использования в гипермедианных ссылках, и каждый HTTP-запрос должен содержать достаточно информации для самого получателя, чтобы обработать его в полной гармонии с природой без гражданства HTTP ".
Таким образом, все, что вы пытаетесь сделать с веб-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();