現在、私は自己ホスティングメソッドを使用するために切り替えたいIISホストアプリケーションがあります。ServiceStack:自己ホストアプリケーションのHttpRequestへのアクセス
しかし、現在のユーザーのユーザー名を取得できるように、セッションにアクセスできません。
これは完全に働いたIISでホストする場合、私が使用したコードです:
/// <summary>
/// A basic wrapper for the service stack session, to allow access to it lower down in the DAL layer without tying us to servicestack.
/// </summary>
public class ServiceStackAuthTokenService : IAuthTokenService
{
/// <summary>
/// GetCurrentAuthToken.
/// </summary>
/// <returns>A string representing the users auth name.</returns>
public string GetCurrentAuthToken()
{
// Grab the current request.
var req = HttpContext.Current.Request.ToRequest();
var res = HttpContext.Current.Response.ToResponse();
// Fetch the authentication service.
var authService = EndpointHost.AppHost.TryResolve<AuthService>();
authService.RequestContext = new HttpRequestContext(req, res, null);
// Grab the session.
var session = authService.GetSession(false);
// Return the username.
return session.UserName;
}
public string UserPropertyName
{
get { return "UserName"; }
}
}
を。これは、次のコードでアプリをホストに追加されます::
container.RegisterAutoWiredAs<ServiceStackAuthTokenService, IAuthTokenService>()
自己ホストを実行していますHttpContext.Currentがnullの場合、自己ホストアプリケーションのもとでリクエストにどのようにアクセスすればよいですか?
ありがとうございます!私が試してみました
更新 追加物事:それは使用することが示唆されたhttps://groups.google.com/forum/#!msg/servicestack/jnX8UwRWN8A/_XWzTGbnuHgJ
:
container.Register>(C => AuthService.CurrentSessionFactoryここにポストにつきとして
);
これは、新しいIAuthSessionを返します。
その投稿のユーザーが行っていることは、私が達成しようとしているものです。最後のポストで
Mythzは言う:
だけ明確にするために、SS-によって決定されます(SS-IDまたはSS-pidのクッキーのいずれかを必要とするユーザーセッションを参照するセッションキーを形成するために、オプト)。 IHttpRequestオブジェクトからCookieを取得することも、ASP.NETでHttpContext.Current.Requestシングルトンを取得することもできます。つまり、IRequestContext、IHttpRequest、IServiceなどのCookieを与えることができる何らかのIAuthUserSessionファクトリを取得する必要があります。
しかし、私はまだIHttpRequestにアクセスする方法を見ることができません。
GetCurrentAuthTokenを行います/あなたのアプリケーションで呼び出されますか?それがサービスにある場合、IHttpRequestとIHttpResponseをGetCurrentAuthToken(base.Request、base.Response)のようなメソッドに渡すことができます。 – paaschpa
こんにちはPaaschpa、それはサービス層に直接の関係がないDAL層で発生します。コンテキストをDALに渡すことはできますが、それはデザインに違反し、各レイヤーを別々に保ちます。 – Rtype
これをさらに調べると、IHttpRequestが表示され、IHttpResponseがサービス基本クラスにあるIRequiresRequestContextインターフェイスを介してサービスに注入されていることがわかります。 私は基本的に同じことにアクセスできるようにしたいので、クライアントセッションが保存されているキャッシュにアクセスすることができます。サービスクラスを見て反射鏡を使用して – Rtype