現在、セルフホステッド メソッドを使用するように切り替えたい IIS ホステッド アプリケーションがあります。
しかし、セッションへのアクセスに問題があるため、現在のユーザーのユーザー名を取得できます。
これは、完全に機能する 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 は次のように述べています。
明確にするために、Users セッションを参照するセッション キーを形成するには、ss-id または ss-pid Cookie のいずれかが必要です (ss-opts によって決定されます)。IHttpRequest オブジェクトまたは ASP.NET の HttpContext.Current.Request シングルトンから Cookie を取得できるため、注入する IAuthUserSession ファクトリは、Cookie を提供できるもの、つまり IRequestContext、IHttpRequest、IService などのいずれかを取る必要があります。
しかし、IHttpRequest にアクセスする方法がまだわかりません。