さて、RESTは設計上ステートレスです。セッション(またはそのようなもの)を追加することで、セッションをステートフルにし、RESTfulAPIを使用するという目的を打ち破ることになります。
RESTfulサービスの全体的な考え方は、ハイパーメディアリンクで使用するためのユニバーサル構文を使用してすべてのリソースを一意にアドレス指定でき、各HTTPリクエストは、受信者がHTTPのステートレスな性質と完全に調和するように処理するのに十分な情報をそれ自体で伝送する必要があるということです。」。
したがって、ここでWeb APIを使用して実行しようとしていることはすべて、RESTfulAPIが必要な場合は再構築する必要があります。
そうは言っても、それでもそのルートを進んでいくつもりなら、Web 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();