Domanda

[Mi dispiace per una domanda disordinato. Credo che sto il targeting Net 2.0 (per ora)]

Ciao, io sono un niubbo ASP.NET. Per cominciare Sto costruendo una pagina che analizza una stringa URL e popola una tabella in un database. Voglio che stringa da rigorosamente della forma:

http://<server>:<port>/PageName.aspx?A=1&B=2&C=3&D=4&E=5

L'ordine degli argomenti non importa, solo che non voglio che nessuno di loro mancanza, o eventuali extra. Ecco quello che ho provato (sì, è brutto, voglio solo farlo funzionare prima):

#if (DEBUG)
        // Maps parameter names to their human readable names.
        // Used for error checking.
        private static Dictionary<string, string> paramNameToDisplayName = new Dictionary<string, string> {
            { "A", "a"},
            { "B", "b"},
            { "C", "c"},
            { "D", "d"},
            { "E", "e"},
            { "F", "f"},
       };


        [Conditional("DEBUG")]
        private void validateRequestParameters(HttpRequest request)
        {
            bool endResponse = false;
            // Use foreach var
            foreach (string expectedParameterName in paramNameToDisplayName.Keys)
            {
                if (request[expectedParameterName] == null)
                {
                    Response.Write(String.Format("No parameter \"{0}\", aka {1} was passed to the configuration generator. Check your URL string / cookie.",
                        expectedParameterName, paramNameToDisplayName[expectedParameterName]));
                    endResponse = true;
                }
            }
            // Use foreach var
            foreach (string actualParameterName in request.Params)
            {
                if (!paramNameToDisplayName.ContainsKey(actualParameterName))
                {
                    Response.Write(String.Format("The parameter \"{0}\", was passed to the configuration generator, but it was not expected. Check your URL string / cookie.",
                        actualParameterName));
                    endResponse = true;
                }
            }
            if (endResponse)
            {
                Response.End();
            }
        }
#endif

e funziona bene, tranne che lamenta ogni sorta di altre cose:

http: // localhost: 1796 / AddStatusUpdate.aspx X = 0


Nessun parametro "A", alias un è stato passato al generatore di configurazione. Controllare la stringa URL / cookie.No parametro "B", aka B è stato passato al generatore di configurazione. Controllare la stringa URL / cookie.No parametro "C", aka c è stato passato al generatore di configurazione. Controllare la stringa URL / cookie.No parametro "D", aka d è stato passato al generatore di configurazione. Controllare la stringa URL / cookie.No parametro "E", alias di posta è stato passato al generatore di configurazione. Controllare la stringa URL / cookie.No parametro "F", alias f è stato passato al generatore di configurazione. Controllare la stringa URL / cookie.The parametro "X", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / cookie.The parametro "ASP.NET_SessionId", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / cookie.The parametro "ALL_HTTP", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / cookie.The parametro "ALL_RAW", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "APPL_MD_PATH", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "APPL_PHYSICAL_PATH", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "AUTH_TYPE", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / cookie.The parametro "AUTH_USER", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / cookie.The parametro "AUTH_PASSWORD", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "LOGON_USER", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "REMOTE_USER", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "CERT_COOKIE", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / cookie.The parametro "CERT_FLAGS", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "CERT_ISSUER", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "CERT_KEYSIZE", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "CERT_SECRETKEYSIZE", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "CERT_SERIALNUMBER", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "CERT_SERVER_ISSUER", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / cookie.The parametro "CERT_SERVER_SUBJECT", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / cookie.The parametro "CERT_SUBJECT", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / cookie.The parameter "CONTENT_LENGTH", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "CONTENT_TYPE", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / cookie.The parametro "GATEWAY_INTERFACE", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "HTTPS", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "HTTPS_KEYSIZE", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "HTTPS_SECRETKEYSIZE", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "HTTPS_SERVER_ISSUER", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "HTTPS_SERVER_SUBJECT", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / cookie.The parametro "instance_id", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "INSTANCE_META_PATH", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / cookie.The parametro "LOCAL_ADDR", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / cookie.The parametro "PATH_INFO", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / cookie.The parametro "PATH_TRANSLATED", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "QUERY_STRING", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / cookie.The parametro "REMOTE_ADDR", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "REMOTE_HOST", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "REMOTE_PORT", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / cookie.The parametro "REQUEST_METHOD", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / cookie.The parametro "SCRIPT_NAME", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "SERVER_NAME", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "SERVER_PORT", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "SERVER_PORT_SECURE", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "SERVER_PROTOCOL", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "SERVER_SOFTWARE", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL cookie.The parametro "URL" /, è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "HTTP_CACHE_CONTROL", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "HTTP_CONNECTION", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "HTTP_ACCEPT", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "HTTP_ACCEPT_CHARSET", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "HTTP_ACCEPT_ENCODING", è stato passato al generatore di configurazione, ma non era previsto. Controlla la tua stri URLng / cookie.The parametro "HTTP_ACCEPT_LANGUAGE", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "HTTP_COOKIE", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "HTTP_HOST", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / parametro cookie.The "HTTP_USER_AGENT", è stato passato al generatore di configurazione, ma non era previsto. Controllare la stringa URL / cookie.Thread veniva interrotta.


C'è qualche modo per me per separare i parametri impliciti ed espliciti la, o non è fattibile? Dovrei nemmeno? Forse la filosofia di ottenere è quello di gettare solo via che ciò che non è necessaria.

Grazie!

È stato utile?

Soluzione

Il dizionario dovrebbe avere una chiave di stringa, il codice non ha "" intorno ai tasti:

private static Dictionary<string, string> paramNameToDisplayName = new Dictionary<string, string> {
    { "A", "a"},
    { "B", "b"},
    { "C", "c"},
    { "D", "d"},
    { "E", "e"},
    { "F", "f"},

};

Per il resto degli errori, provare a utilizzare questo, il codice era alla ricerca di tutti i params distaccati, non solo i params querystring (request.QueryString.AllKeys):

if (!request.QueryString.AllKeys.Contains<string>(expectedParameterName))
                {
                    Response.Write(String.Format("No parameter \"{0}\", aka {1} was passed to the configuration generator. Check your URL string / cookie.", expectedParameterName, paramNameToDisplayName[expectedParameterName]));
                    endResponse = true;
                }

Altri suggerimenti

Come drousseau cita, avrete bisogno di utilizzare la raccolta QueryString invece di Params. Params include tutti i dati passati in merito alla richiesta, il che significa cookie, dati dei moduli inviati, i parametri QueryString e ServerVariables.

Sembra che si sta controllando i biscotti e, in modo potrete sia bisogno di fare un controllo separato per tale raccolta, oppure unire le due utilizzando qualcosa di simile:

        var both = (
            from key in Request.QueryString.AllKeys
            select new { Key = key, Value = Request.QueryString[key] }).Union(
            from key in Request.Cookies.AllKeys
            select new { Key = key, Value = Request.Cookies[key].Value }).ToDictionary(entry => entry.Key, entry => entry.Value);

E 'anche interessante notare che si sta anche andando a essere sempre un cookie è sceso da ASP.NET lo stato della sessione. È possibile sia il codice intorno ad esso ignorando esplicitamente biscotti chiamati "ASP.NET_SessionId" (più facile), o semplicemente disattivare lo stato della sessione in web.config -. È necessario eliminare i cookie se

Modifica appena visto il bit sul targeting 2.0, il che significa che bella dichiarazione po LINQ è fuori questione. Probabilmente sarebbe più semplice per verificare appena ciascuna delle collezioni (QueryString e Cookies) a parte.

Modifica parte DEUX: Ecco un non-LINQ alternativa all'utilizzo di una singola ricerca:

        NameValueCollection both = new NameValueCollection(Request.QueryString);
        foreach (String key in Request.Cookies.AllKeys)
        {
            if (key != "ASP.NET_SessionId") both.Add(key, Request.Cookies[key].Value);
        }

Utilizzando una stringa hard-coded come quello è brutto, ma hey, dovrebbe funzionare.

Vorrei anche far notare che se si è utilizzato ASP.NET MVC o anche solo System.Web.Routing (entrambi i quali, purtroppo, richiede .NET 3.5), che non avrebbe dovuto fare niente di tutto questo, dal momento che il quadro di routing fa tutto per voi! - e si otterrebbe digitato i parametri di boot

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top