Generowanie zmanipulowanego zapytania w c#
Używając poniższego kodu otrzymuję ładny sformatowany ciąg znaków:
Request.QueryString.ToString
Daje mi coś w stylu: & hello=world & microsoft=sucks
Ale kiedy używam tego kodu do sklonowania kolekcji do innego obiektu (tego samego typu), otrzymuję Type() z metody ToString ().
System.Collections.Specialized.NameValueCollection variables = new System.Collections.Specialized.NameValueCollection(Request.QueryString);
if (!string.IsNullOrEmpty(variables["sid"]))
variables.Remove("sid");
Response.Write(variables.ToString());
Czy istnieje bardziej uporządkowany sposób na wyjście go zamiast szukać i budować łańcuch ręcznie?
6 answers
Możesz również użyć Reflector, aby wyodrębnić klasę HttpValueCollection
do swojej własnej, a następnie użyć jej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-10 14:57:33
HttpValueCollection jest wewnętrzny, ale możesz użyć" var", aby zadeklarować go bez rozpakowywania za pomocą reflektora.
var query = HttpUtility.ParseQueryString(Request.Url.Query);
query["Lang"] = myLanguage; // Add or replace param
string myNewUrl = Request.Url.AbsolutePath + "?" + query;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-15 07:43:56
Ponieważ w rzeczywistości jest to specjalny NVC, który jest typu HTTPValueCollection. Więc kiedy zadzwonisz .ToString na nim, wie, jak poprawnie sformatować.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-23 14:32:20
Dlaczego chcesz skopiować kolekcję QueryString do nowej NameValueCollection?
if (!string.IsNullOrEmpty(Request.QueryString["sid"]))
Request.QueryString.Remove("sid");
Tak rzeczywiście, mylę się, jest tylko do odczytu. Tak więc istotą jest użycie metody Remove na Twoim NameValuecollection:
System.Collections.Specialized.NameValueCollection variables = new System.Collections.Specialized.NameValueCollection(Request.QueryString);
if (!string.IsNullOrEmpty(variables["sid"]))
variables.Remove("sid");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-23 14:30:16
Jeśli absolutnie nie potrzebujesz NameValueCollection, słownik oferuje wiele tych samych semantyki:
var variables = Request.QueryString.OfType<DictionaryEntry>()
.Where(entry => entry.Key != "sid")
.ToDictionary(entry => entry.Key, entry => entry.Value);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-23 15:07:10
Prośba.QueryString faktycznie zwraca obiekt HttpValueCollection (który unfortunately, jest wewnętrzny do systemu.WWW, więc nie możesz tego zrobić).
Niemniej jednak, HttpValueCollection pochodzi z NameValueCollection, a jej metoda Remove() pozostaje nienaruszona, więc powinieneś być w stanie wywołać żądanie.QueryString.Remove ("sid");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-23 14:30:42