Pracuję na aplikacji sieci web ASP.NET MVC3 (nie napisane przeze mnie), która ma maksymalny rozmiar wysyłania 100MB. Teraz ta aplikacja internetowa jest instalowana na komputerach serwerów dla klientów, więc byłoby miło, gdyby wartość maksymalnego rozmiaru przesyłanego pliku była konfigurowalna dla każdego klienta. Mają oni dostęp do edycji pliku web.config dla aplikacji internetowej, jeśli zajdzie taka potrzeba.Jak odczytać wartość systemową z web.config i użyć w ASP.NET MVC C# metoda
Teraz nie ma wartości w pliku web.config tak:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="104857600" />
</requestFiltering>
</security>
</system.webServer>
Ponadto istnieje inna wartość tutaj, które wydaje się być podobna:
<system.web>
<httpRuntime maxRequestLength="104857600" executionTimeout="360" />
</system.web>
Że 104857600 bajtów wydaje się być plik 100MB limit przesyłania. Jednak zmieniając wartość odkryłem, że nie jest to wartość autorytatywna i nie przestrzegał nowego limitu. Więc po kilku innych wykopaliskach znalazłem gdzieś indziej w kodzie C# wartość zakodowana na stałe public const double MaxContentSize = 104857600
, a inna metoda C# używała tej wartości do akceptowania/odrzucania przesyłania pliku Ajax.
Myślę, że chciałbym zastąpić tę mocno zakodowaną liczbę w kodzie, aby odczytała wartość z pliku web.config. Wtedy przynajmniej każdy może zmienić tę wartość w pliku web.config podczas wdrażania witryny.
Czy możesz zrobić coś takiego?
MaxContentSize = ConfigurationManager.systemWeb.httpRuntime['maxRequestLength'];
Widziałem kilka przykładów przy użyciu appSettings w web.config np.
<appSettings><add key="MySetting" value="104857600" /></appSettings>
następnie dostępie to lubią:
ConfigurationManager.AppSettings["MySetting"]
Ale to oznaczałoby dodanie wartości niestandardowej tam i teraz my mamy 3 miejsca, aby zmienić go w pliku web.config. Czy ktoś ma pomysł, jak to zrobić właściwie?
Dziękujemy
Thank-ty to działa! Wymaga dwóch przestrzeni nazw: 'using System.Configuration;' i 'using System.Web.Configuration;'. Zaakceptowałem twoją odpowiedź, ponieważ ma ona obsługę błędów, jeśli sekcja httpRuntime nie istnieje, przywraca domyślną wartość, która jest dobra. Próbowałem usunąć całą sekcję ' ' z pliku Web.config, a przesyłanie plików zakończyło się całkowitym niepowodzeniem, zanim dotrze do tego kodu, więc domyślam się, że jest to zdecydowanie potrzebne. Więc jeśli pozbędę się domyślnego kodu wartości, to sprowadzę go do 2 linii, ładnie. –
zuallauz