2009-07-10 11 views
8

Utilizzo IIS 7.5 su Windows 7 RC. Io uso il modulo di riscrittura Url IIS per riscrivere gli URL.IIS 7.5 con modulo di riscrittura URL Doppio QueryString Params sul postback

Tutto sembra funzionare correttamente, finché non faccio un postback facendo clic su un pulsante. E poi aggiunge i params queryString mio URL riscritto, come questo:

Riscritto URL, come appare nel browser: http://localhost/en/product/1239/Gary+Fisher+Hkek+Mountain+Bike

Senza riscrittura degli URL l'URL è:

http://localhost/product.aspx?lang=en&id=1239&title=Gary+Fisher+Hkek+Mountain+Bike

Quando faccio clic su un pulsante per eseguire un postback, l'URL diventa:

http://localhost/en/product/1239/Gary+Fisher+Hkek+Mountain+Bike?lang=en&id=1239&title=Gary+Fisher+Hkek+Mountain+Bike

E quando l'URL viene riscritto, tutti i params queryString sono raddoppiate - così quando voglio ottenere la lingua corrente in questo modo:

Request.QueryString["lang"] 

Il valore al mio ritorno è "en, en".

Qualcun altro ha questi problemi?

UPDATE: riscrivere le regole da Web.Config

<rule name="RedirectProductPageUrls" stopProcessing="true"> 
    <match url="^product\.aspx$" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{REQUEST_METHOD}" negate="true" pattern="^POST$" /> 
     <add input="{QUERY_STRING}" pattern="^lang=([^=&amp;]+)&amp;id=([^=&amp;]+)&amp;title=([^=&amp;]+)$" /> 
    </conditions> 
    <action type="Redirect" url="{C:1}/products/{C:2}/{C:3}" appendQueryString="false" redirectType="Permanent" /> 
</rule> 
<rule name="RewriteProductPageUrls" stopProcessing="true"> 
    <match url="^([^/]+)/product/([^/]+)/([^/]+)/?$" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
    </conditions> 
    <action type="Rewrite" url="product.aspx?lang={R:1}&amp;id={R:2}&amp;title={R:3}" /> 
</rule> 
+0

Puoi pubblicare la regola di riscrittura? È sufficiente pubblicare qualsiasi cosa nel web.config: ... –

+0

Aggiornato con una regola di riscrittura e una regola di reindirizzamento per le pagine del prodotto. – MartinHN

risposta

8

Aggiungere l'appendQueryString = attributo "falso" per l'elemento di azione della regola di riscrittura pure.

Spero che questo aiuti.

+0

Funziona come un fascino! Ora sono pronto per Windows 7 RTM. – MartinHN

0

Questa è una funzionalità di sicurezza di IIS Rewrite Module.

Personalmente preferisco Riscrivere ISAPI poiché è molto meglio, è più semplice scrivere regole e ha più funzioni.

Sono stati rilevati anche carichi da moderati a elevati (oltre 100 connessioni a un sito Web) che IIS Rewrite Module indirizza il pool di applicazioni a crash, spawn e nuovo processo.

+0

Bruce, ho appena eliminato l'UrlRewritting Dll perché mi ha costretto a utilizzare app_pool in modalità classica. Ho pensato che il built-in di IIS 7 sarebbe migliore e più ottimizzato. Stai suggerendo il contrario? per favore fammi sapere .. sono preoccupato – aron

11

sono stato in grado di risolvere il problema aggiungendo

Form.Action = Request.RawUrl; 

all'evento Page Load. Sono stato in grado di lasciare appendQueryString = "TRUE" e finora funziona correttamente.

+0

Hey Ryan, ho giocato con l'appendQueryString per un'ora senza fortuna. Ma il tuo suggerimento ha funzionato! grazie – aron

+0

Sì, questo problema è stato risolto modificando l'azione del modulo. È possibile creare un adattatore di controllo personalizzato in modo che la modifica si applichi a tutti i moduli del sito. Scott Gu ha una guida in fondo a questo post: [link] (http: //weblogs.asp.net/ScottGu/archive/2007/02/26/tip-trick-url-rewriting-con-asp-net.aspx) – Corgalore

Problemi correlati