1

ビジネス用の API を開発しています。

リクエストには、取得するために POST http 動詞を必要とする authTokens が必要です。フローは次のように機能するはずです-

  1. ユーザーのクライアントは、ユーザー名とパスワード (ssl 保護) を GetAuthToken サービスに送信します。サービスは認証トークンを返します。
  2. ユーザーのクライアントは、POST を必要とせずに、他の要求でトークンを使用できます。

便利な残りの関数 CheckAuthToken を作成して、ユーザーが自分の作業認証トークンが正しいかどうかをデバッグできるようにしました。ユーザーのメールアドレスと認証トークンを確認する必要があります。これは SOAP および POST 経由では正常に機能しますが、ルートは GET 経由では機能しないようです。

DTO は次のとおりです。

[Route("/auth/CheckAuthToken/{EmailAddress}/{AuthToken}")]
public class CheckAuthToken
{
    public string EmailAddress { get; set; }
    public string AuthToken { get; set; }
}

たとえば、私が要求した場合 (%2Eこの投稿の推奨事項である に注意してください: ServiceStack Handler Not Found When Periods Present in Path ):

GET /auth/CheckAuthToken/aaron%40meemailsite%2Ecom/Hnot0real0auth0token4mzSBhKwFXY6xQcgX6XqsE%3D HTTP/1.1\r\n

それでも 404 が返されます。ServiceStack に渡す前にピリオドがデコードされているようです。

代わりにクエリ文字列変数を使用できることを認識し、リクエストを次のようにします。

GET /auth/CheckAuthToken?EmailAddress=aaronb%40bluebookinc%2Ecom&AuthToken=HwjQoKiHD2HSngFeeCH1k4mzSBhKwFXY6xQcgX6XqsE%3D HTTP/1.1\r\n

しかし、私はそれよりも柔軟であることを望んでいました。特にビジネス レイヤーの REST サービスでは、特定の機能で電子メールによるユーザー識別も必要になります。

何か案は?

4

1 に答える 1

1

実行している ServiceStack のバージョンは何ですか?

これは、最新バージョン (3.9.55) での合格テストです。また、エンドポイントを使用して単純な API をテストしましたが、これらの値を URL に渡す際に問題はありませんでした。

[Route("/auth/CheckAuthToken/{EmailAddress}/{AuthToken}")]
public class CheckAuthToken : IReturn
{
    public string EmailAddress { get; set; }
    public string AuthToken { get; set; }
}

[Test]
public void Test()
{
    var url = new CheckAuthToken() { 
        EmailAddress = "me@test.com", 
        AuthToken = "fake" 
    }.ToUrl("GET");

    Assert.That(url, Is.EqualTo("/auth/CheckAuthToken/me%40test.com/fake"));
}
于 2013-07-18T23:26:29.900 に答える