1

ServiceStack.netを使用しようとしているので、最初のサービスは、TryAuthenticateメソッドが現時点でTrueを返すカスタムCredentialsAuthProviderを実装しています。

私が抱えている問題は、クライアントが最初に電話をかける(そして成功する)ことです

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 = 

これは単に「Unauthorized」(例外)を返します。

サービスは非常に簡単です。

[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}");
4

1 に答える 1

2

セッションプロバイダーICacheClientが使用するものを登録する必要があります。

たとえば、インメモリキャッシュを次のものに登録できます。

container.Register<ICacheClient>(new MemoryCacheClient());

ServiceStackで利用できる他のキャッシングプロバイダーは次のとおりです。

注:これは予期せず数人の人に見られるため、ServiceStackの次のバージョン(v3.9.12 +)では、指定されていない場合はInMemoryキャッシュを使用するように自動登録します。

于 2012-09-17T21:31:55.203 に答える