1

我正在为我们的业务开发 API。

请求应该需要需要 POST http 动词才能检索的 authToken。流程应该像这样工作-

  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 回答