2016-05-24 8 views
-1

Wir bauen eine Anwendung auf dem folgenden Stapel:Wie kann ich verschiedene maximale Segmentlängen von meinem Webserver bekommen?

  • .NET 4.6.1
  • ASP.NET MVC 5
  • IIS 8

Wir haben die Menschen sehr lange Suche zu erzeugen filtert Query-Strings in unserer Anwendung. Derzeit führen die resultierenden GET-Anforderungen zu einer Ausnahme auf dem Server. Wir möchten sie warnen, wenn ihre Anforderungszeichenfolge zu lang ist, anstatt eine ungültige GET-Anforderung zu senden.

Unser .js-Typ kann AJAX-Anfragen unterstützen, um die Längenprüfung für die vollständige URL und den Querystring ziemlich einfach zu unterstützen. Das Problem ist, wir wollen nicht annehmen, dass wir die richtigen maximalen Längen für diese Werte kennen. Wir möchten den Server abfragen, um zu erfahren, wie groß die maximale Länge für die URL und die Querystring ist, und diese nur dynamisch auf der Client-Seite verwenden.

Ich kann den Web-API-Endpunkt erstellen, um diese Werte sehr einfach zurückzugeben, aber ich habe Probleme bestimmte Ich bekomme die richtigen Werte. Zum Beispiel kann ich unsere Konfigurationsdatei direkt und sucht Dinge wie diese lesen:

<system.webServer> 
    <security> 
     <requestFiltering> 
     <requestLimits maxUrl="2000" maxQueryString="2000" /> 
     </requestFiltering> 
    </security> 
</system.webServer> 

Aber ich bin nicht sicher , die wirklich der maßgebende Ort zu suchen ist. Ich hoffe, dass jemand weiß, wie C# verwenden IIS die folgenden Fragen zu stellen und bestimmte zu haben, die richtigen Antworten sein:

  1. Was die maximal zulässigen ist URL-Länge für eine GET-Anforderung an die aktuelle Anwendung?
  2. Was ist die maximal zulässige Querystringlänge für eine GET-Anfrage an die aktuelle Anwendung?
+1

Warum nicht einfach eher AJAX POST verwenden als AJAX GET so haben Sie nicht Sorgen über die Länge von Abfragezeichenfolgenlängen? – NightOwl888

+0

Da wir Anfragen an REST-Services senden, möchten wir bei jeder Art von Anfrage die angegebene Intention einhalten. In unserem Projekt ist POST für das Erstellen von Dingen. –

Antwort

0

Hier ist, wie Sie die Konfigurationswerte lesen kann - die dann von Ihrem API zurückgegeben werden können:

var config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath); 
var section = config.GetSection("system.webServer"); 
var xml = section.SectionInformation.GetRawXml(); 
var doc = XDocument.Parse(xml); 
var element = doc.Root.Element("security").Element("requestFiltering").Element("requestLimits"); 
var maxUrl = element.Attribute("maxUrl").Value; 
var maxQs = element.Attribute("maxQueryString").Value; 

Beachten Sie aber, dass der Client (Browser) seine eigene Grenze verhängen ist, wie Proxy Server.

Die folgende SO-Antwort impliziert, dass Sie können die Grenze in der httpRuntime Element als auch festlegen ... obwohl es nicht erklärt, warum. Siehe: How to configure the web.config to allow requests of any length

Dieser Artikel auf www.asp.net auch hilfreich sein kann in Bezug auf weitere Informationen, die zulässige URL zunehmende Größe: http://www.asp.net/whitepapers/aspnet4#0.2__Toc253429244