1

JsonServiceClient クライアントを使用して、外部ベンダーによって IIS 7 でホストされている RESTful サービスと通信しています。

Get メソッドを呼び出すために使用しているサンプル コードを次に示します。

ServiceStack.ServiceClient.Web.JsonServiceClient client = new ServiceStack.ServiceClient.Web.JsonServiceClient("UrlToVendor"));

client.SetCredentials("userName", "password");

client.AlwaysSendBasicAuthHeader = true; 
DTOReturn result = client.Get<DTOReturn>(string.Empty);

私はいつも認証に失敗します。スニファーを配置すると、Authorization ヘッダーが次のように送信されます。

基本ユーザー名:パスワード

それ以外の

基本ユーザー名:パスワード

標準の .Net 呼び出しを使用して動作させることができました

System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(
                "UrlToVendor");

string authInfo = "userName:password";
authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));

req.Accept = "application/json"; //text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
req.PreAuthenticate = true;
req.Method = "GET";
req.Headers["Authorization"] = string.Format("Basic {0}", authInfo);

System.Net.HttpWebResponse res = (System.Net.HttpWebResponse)req.GetResponse();

そして、「Basic」を「basic」に変更した場合、これらの標準呼び出しは JasonServiceClient と同じように失敗しました。助言がありますか?

4

1 に答える 1

2

誰かが同じ問題を抱えていたようです。この最近のコミットにより、auth-scheme が「basic」から「Basic」に変更されました。https://github.com/ServiceStack/ServiceStack/commit/d4f21c5355ab87d7315e142372eef9a40e096b5f dll を更新するだけでよいはずです。

RFC 2617 秒 1.2 によると、auth-scheme は case-insensitiveです。https://www.rfc-editor.org/rfc/rfc1945#page-47を参照してください。ベンダーサービスがそれを受け入れない理由について知りたいです。

于 2013-02-28T14:52:14.913 に答える