私は非常に奇妙な問題を抱えています (SL5、WCF DataServices 5.0.1 を使用): ユーザーが存在するかどうかを確認する 2 つの文字列パラメーター (ユーザー名、パスワード) を持つ ServiceOperation があります。
public IQueryable<User> Login(string username, string password)
{...}
これを呼び出そうとすると、パスワードハッシュに「+」文字が含まれている場合を除いて、すべて正常に機能します。この場合、空白文字に置き換えられているようです。
var pwd = CRQWKrKzCcQVnlhk2zl0j5QM+c5ujQGMv0XXnh4genI=
this.Context.BeginExecute<User>(new Uri(string.Format("/Login?username='{0}'&password='{1}'", username, pwd), UriKind.Relative), (ar) => { .. }, null);
Fiddlerでそれを取得すると、Request-Headerは問題ないように思えます...
GET /Service.svc/Login?username='xyz'&password='CRQWKrKzCcQVnlhk2zl0j5QM+c5ujQGMv0XXnh4genI=' HTTP/1.1
しかし、WebForms-Tab では、Password-QueryString に「+」の代わりに空白が既に含まれています。サーバーでデバッグしても同じ結果です...
「+」が置き換えられた理由を知っている人はいますか? 他に無効な文字はありますか? どうすればそれを回避できますか?
更新/編集:
驚くべきことに、次のクエリは期待どおりに機能します。
var query = (DataServiceQuery<User>) from c in this.Context.Users
where
c.Username.Equals(username.ToLower()) &&
c.Password.Equals(Cryptography.ComputeSha256Hash(password + username.ToLower()))
select c;
前もって感謝します!