7

現在、セルフホステッド メソッドを使用するように切り替えたい 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 にアクセスする方法がまだわかりません。

4

1 に答える 1