我有一個自定義 Web 服務,我使用 查詢并提供電子郵件 ( [email protected]) 和廣告帳戶 ( MyDomain\\MyUser) 作為引數QueryBuilder,但是當我這樣做時.ToQueryString(),@符號未編碼?
有沒有辦法獲得正確編碼的字串或不編碼的原因?
QueryBuilder qb = new QueryBuilder();
qb.Add("adAccount", "MyDomain\\MyUser");
qb.Add("email", "[email protected]");
var queryString = qb.ToQueryString();
我上面的代碼回傳 ( @):
?adAccount=MyDomain\MyUser&[email protected]
但我希望 ( @):
?adAccount=MyDomain\MyUser&[email protected]
uj5u.com熱心網友回復:
QueryBuilder 的源代碼位于此處- 它不是一個復雜的類,基本上只是一個List<KeyValuePair<string,string>>在被ToString'd時對鍵/值執行 UrlEncode 的類。它不是密封的并且ToString是可覆寫的,因此您可以創建自己的版本,該版本可以在需要 QueryBuilder 的任何地方使用:
class QueryBuilderEx : QueryBuilder
{
public override string ToString()
{
return base.ToString().Replace("@", "@");
}
}
如果您只想編輯值,而不管密鑰,那就有點麻煩了,因為您需要以原始樣式重新實作 ToString,但是_params存盤對的串列是私有的,因此無法訪問到您的子類。但是,您可以讓 QueryBuilder 列舉自身:
class QueryBuilderEx : QueryBuilder
{
public override string ToString()
{
var builder = new StringBuilder();
bool first = true;
foreach(var pair in this)
{
builder.Append(first ? '?' : '&');
first = false;
builder.Append(UrlEncoder.Default.Encode(pair.Key));
builder.Append('=');
builder.Append(UrlEncoder.Default.Encode(pair.Value).Replace("@", "@"));
}
return builder.ToString();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/381692.html
