Request.Form.Set'i (k, v) deneyin, ancak istisna atar Toplama kümesi salt okunurC# Request.Form değişkenlerini değiştirebilir miyim?
cevap
Bu tam Request.QueryString modifiye aynıdır. Her ikisi de özel mülkler tarafından karmaşıktır ve bir hata olarak kabul edilebilir, ancak farkında olduğum iki olası çözüm vardır (response.redirect planını elden çıkaracağım - bu korkunç).
NameValueCollection oQuery = Request.QueryString;
oQuery = (NameValueCollection)Request.GetType().GetField("_queryString",BindingFlags.NonPublic | BindingFlags.Instance).GetValue(Request);
PropertyInfo oReadable = oQuery .GetType().GetProperty("IsReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
oReadable.SetValue(oQuery, false, null);
oQuery["foo"] = "bar";
oReadable.SetValue(oQuery, true, null);
B Planı, ben daha iyi birim test için oldukça rahat doğrudan koleksiyonu ile ilgili önlemek ve bunun yerine bir NameValueCollection olarak geçmek olduğunu düşünüyorum:
Birinci yöntem, doğrudan koleksiyonu değiştirmek için yansıma kullanmaktır işlemek istediğiniz herhangi bir yönteme, ihtiyacınız olan her şeye sığ kopyalama. Web isteklerini dalgalandırmak için bunu kendim kullandım.
Düzenleme: hayır önerilen bir şeyi ifade ve (~ = pahasına) mümkün olduğunca kaçınılmalıdır tarafından Marc Gravell bu şekilde özel şeyler kurgulama B planı
Form, istemcinin istekte ne gönderdiğinin bir temsilidir. Ne yapmak istiyorsun? Şahsen, "formu oku" kodunu "değerler ile bir şey yap" kodundan ayırmaya çalışacağım - bu şekilde, ön işleme işlemini erken yapabilir (formdan okurken) ve daha sonra kodun, 'un aslında nolu gönderilme şeklini bilmesi gerekir - sadece verilen değerleri alır (yani hiçbir zaman doğrudan isteğiyle konuşmaz).
Ayrıca mantığınızı bir forma veya hatta bir http isteğine ihtiyaç duymadan da test edebileceğiniz anlamına gelir.
Aslında ASP.NET MVC sizin için bir sürü (yukarıdaki paragraf) ... Eğer .items koleksiyonu güncelleyebilirsiniz
Not yapacak - ama bu biraz daha belirsiz (yani onu özellikle form ile ilgili değildir).
(btw yazım hatası sabitlemek için alkış)
- 1. Çizgi grafiğin genişliğini değiştirebilir miyim?
- 2. Tercihler dosya adını değiştirebilir miyim?
- 3. Visual C++ çalışma zamanını başka bir yığına değiştirebilir miyim?
- 4. XML yorum şablonunu Visual Studio'da değiştirebilir miyim?
- 5. Google logosunun konumunu MKMapView'da değiştirebilir miyim?
- 6. Linux kernel işlevini bir modülle değiştirebilir miyim?
- 7. Vurgu rengini (AppCompat) program aracılığıyla değiştirebilir miyim?
- 8. Kendi mysql parolamı değiştirebilir miyim PMA Problem
- 9. Git-add'in hunk boyutunu değiştirebilir miyim?
- 10. Çözüm Konfigürasyonu combobox'ının genişliğini IDE'deki değiştirebilir miyim?
- 11. Spark'in yürütme belleğini çalışma zamanında değiştirebilir miyim?
- 12. Saatlerin sırasını Delphi XE2'de değiştirebilir miyim?
- 13. Arka plan resmini PhpStorm'da değiştirebilir miyim?
- 14. Git-add'in ** varsayılan ** iri boyutunu değiştirebilir miyim?
- 15. Bir enum ile ilişkili değerleri değiştirebilir miyim?
- 16. Yapıdaki bir Form Sınıfı eylemini değiştirebilir miyim?
- 17. Emacs fantezi başlangıç metnini değiştirebilir miyim?
- 18. FormsAuthentication tanımlama bilgisi adını değiştirebilir miyim?
- 19. ReSharper'ın özellikleri oluşturma biçimini değiştirebilir miyim?
- 20. Env değişkenlerini ssh üzerinden iletebilir miyim?
- 21. Bir dışa aktarma ismini es6 modülünde değiştirebilir miyim?
- 22. Dosya sistemini, bir dosyanın salt okunur özniteliğini değiştirebilir miyim?
- 23. Hizmeti değiştirmeden WCF ServiceContract arabiriminin ad alanını değiştirebilir miyim?
- 24. Giden istek başlıklarını bir Chrome Uzantısıyla değiştirebilir miyim?
- 25. Tarayıcı uzantısıyla bir iframe için yönlendireni değiştirebilir miyim?
- 26. Çalışma Kitaplığı Günlüğü blokunun yapılandırmasını çalışma zamanında değiştirebilir miyim?
- 27. Ruby on Rails - Bir özniteliğin değerini çağırılmadan önce değiştirebilir miyim?
- 28. Yapılandırma dosyasında bir web hizmeti referansı URL'sini değiştirebilir miyim?
- 29. Java'da bir değişken için bildirim türünü değiştirebilir miyim?
- 30. .NET'te türlerin nasıl çözüleceğini ve örneklendirilebileceğini değiştirebilir miyim?
için daha anlamlı nedenler verdiğim. Ne de olsa bir sebepten dolayı özel hale getiriliyorlar. Bir kütüphanenin belirli bir versiyonuna güvenirsiniz. Temel uygulamadaki herhangi bir değişiklik uygulamanızı bozabilir. –
Ve görürsünüz Plan B – annakata
Plan A savunmasız bir şey detayı. Bence doğru yol değil. Kendiniz test edebilirsiniz. –