1

就像我的许多 ServiceStack 问题一样,我相信这会很容易。

我有一个 asp.net MCC4 应用程序,我在其中使用 ServiceStack 进行身份验证。由于 ServiceStack 客户端生成的 cookie 未共享,因此我已按照以下问题的响应来解决此问题:

MVC 控制器中的 ServiceStack 会话始终为空

在我的客户中,我有这段代码:

            var authService = AppHostBase.Resolve<AuthService>();
            authService.RequestContext = System.Web.HttpContext.Current.ToRequestContext();
            var AuthResponse = authService.Authenticate(new Auth
            {
                provider = "credentials",
                UserName = user.user_id,
                Password = user.password,
                RememberMe = true
            });


            if (AuthResponse.SessionId != null)
            {
                Session["IsAuthenticated"] = true;
                Session["UserID"] = AuthResponse.UserName;
                FormsAuthentication.SetAuthCookie(user.user_id, true);
                return Redirect("/home");
            }
            else
            {
                Session["IsAuthenticated"] = false;
            }

当我尝试运行应用程序时,我收到错误:

" AppHostBase 未初始化。 "

我可能会错过什么?我提前为我对 ASP.net 的缺乏经验表示歉意。

更新

我应该指出,这只是一个 MCV4 客户端应用程序,它将使用属于不同项目的 ServiceStack API。

更新 2

我认为这可能是我对 SS 的不完全理解的一部分,以及它如何适合这样的 Web 应用程序。我相信我真正想要的是了解这个 ASP.net 客户端如何连接到 ServiceStack API 服务器上的现有会话。

4

1 回答 1

3

您需要在 mvc4 上下文下配置您的应用程序库,只需添加并运行您的应用程序主机配置并在全局 asax 文件中调用它

就我而言,我在一个空白的网络应用程序中运行我的服务主机,但这也适用于你 mvc4。

    protected void Application_Start(object sender, EventArgs e)
    {

        new AppServiceHost().Init();
        RouteTable.Routes.MapHubs();
    }

在您的 serviceStack 应用程序中:

 public class AppServiceHost : AppHostBase
    {
        public AppServiceHost()
            : base("Rest Service", typeof (AnyServiceYouHave).Assembly)
        {
            SetConfig(new EndpointHostConfig
                {
                    //your configuration
                });
        }

         public override void Configure(Container container)
        {
            //Your configuration
        }
}

编辑:为了共享您的会话使用户您已在服务堆栈中配置了缓存提供程序

container.Register<ICacheClient>(new MemoryCacheClient()); //or any other
于 2013-10-02T19:36:59.630 回答