我正在尝试使用ServiceStack.net,因此我的第一个服务实现了一个Custom CredentialsAuthProvider,其TryAuthenticate方法此时只返回True。
我遇到的问题是客户端首先调用(和成功)
var rc = new JsonServiceClient("http://localhost:1337/");
var ar = rc.Send<AuthResponse>(new Auth
{
provider = CredentialsAuthProvider.Name,
UserName = "user",
Password = "p@55word",
RememberMe = true
});
其次是:
var newJob = rc.Post<BladeJob>("/jobs", new BladeJob { Name = "TestJob" }); //todo.Id =
简单地返回“未经授权”(例外)。
服务非常简单:
[Authenticate()]
public class BladesService : RestServiceBase<BladeJob>
{
public JobRepository Repository { get; set; }
public override object OnPut(BladeJob request)
{
return Repository.Store(request);
}
public override object OnPost(BladeJob job)
{
return Repository.Store(job);
}
public override object OnGet(BladeJob request)
{
IAuthSession session = this.GetSession();
if (request.JobID != default(ulong))
return Repository.GetByID(request.JobID);
return Repository.GetAll();
}
}
我在TryAuthenticate中放了一个断点,它就很好了,我做错了什么?
整个主机配置在这里:
public override void Configure(Funq.Container container)
{
//Register Web Service dependencies
container.Register(new JobRepository());
//Register all Authentication methods you want to enable for this web app.
Plugins.Add(new AuthFeature(() => new AuthUserSession(),
new AuthProvider[] {
new CustomCredentialsAuthProvider() //HTML Form post of UserName/Password credentials
}
));
//Register user-defined REST-ful routes
Routes
.Add<BladeJob>("/jobs")
.Add<BladeJob>("/jobs/{JobID}");
答案 0 :(得分:2)
您应该注册Session Provider应该使用的ICacheClient
。
E.g。您可以使用以下命令注册内存缓存:
container.Register<ICacheClient>(new MemoryCacheClient());
以下是Caching providers可用的其他ServiceStack。
注意:由于意外地抓住了一些人,所以在下一版ServiceStack(v3.9.12 +)中,如果没有指定,我们将自动注册使用InMemory Cache。