Android アプリケーション (Xamerin で作成) で JsonServiceClient を使用しています。servicestack Web サイトにある HelloWorld の例で動作するテスト クライアントがあります。認証なしで問題なく動作し、すぐに値を返します。
現在、非常に基本的な認証から始めて、認証をミックスに取り入れようとしています。サーバー上に次のようなカスタム認証およびセッション クラスがあります。
public class userSession : AuthUserSession
{
public string clientCode { get; set; }
}
public class userAuth : CredentialsAuthProvider
{
public override bool TryAuthenticate(IServiceBase authService, string userName, string password)
{
if (userName == "user" || password == "1234") {
var session = (userSession)authService.GetSession(false);
session.clientCode = "peruse";
return true ;
} else {
return false;
}
}
}
そしてそれは以下で構成されています:
// auth feature and session feature
Plugins.Add(new AuthFeature(
() => new userSession(),
new[] { new userAuth() }
) { HtmlRedirect = null } );
クライアント側では、次のように新しい JsonServerClient を呼び出しています。
JsonServiceClient client = new ServiceStack.ServiceClient.Web.JsonServiceClient("http://172.16.0.15/");
そして、Android インターフェイスのボタンのイベント:
try
{
client.SetCredentials("user", "1234");
HelloResponse response = client.Get<HelloResponse>("/hello/" + toSum.Text);
txtResult.Text = response.Result ;
}
catch (Exception ex)
{
txtResult.Text = ex.Message;
}
サーバーから 404 が返ってきます。Linux から cURL でアクセスしようとすると:
curl -v http://user:1234@172.16.0.15/hello/5
戻り値:
* Trying 172.16.0.15... connected
* Server auth using Basic with user 'user'
> GET /hello/5 HTTP/1.1
> Authorization: Basic dXNlcjoxMjM0
(その他の冗長なもの...そして...)
HTTP/1.1 302 Found
ログインページへのリンクのように見えるものとともに:
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="/login.aspx?ReturnUrl=%2fhello%2f5">here</a></h2>
</body><html>
私は Web.config に入り、このログイン ページへの参照を削除しましたが、それでもそこに送られようとしています。
私の質問は次のとおりです。資格情報を正しい方法で送信していますか? もしそうなら、提供されたコードは合理的な方法でそれらを処理しているように見えますか?
ありがとう