URL-Parameter-Codierung in MVC .NET
Ich habe einen controller in einer MVC-4 .NET-Anwendung, erhält einen string als parameter aus einer URL. Das geht aus einer aspx-Seite weitergeleitet, um den controller in Route.config
.
Wenn ich senden Sie diese als Wert für den parameter in der client: fwdgerhb+bhrth+ftrgbhrt
Bekomme ich folgenden Wert an den server: fwdgerhb bhrth ftrgbhrt
Den server besteht in der Auswertung der URL-parameter-Wert als eine codierte URL und ersetzt +
durch . Aber es wurde nicht URL-kodiert. Dies wird auftreten, für die anderen Kombinationen von Sonderzeichen, wenn Sie in der parameter-Wert.
Gibt es eine config-parameter im IIS-Server zu konfigurieren, die der server nicht versuchen, die URL-decode diesen Wert?
Beispiel Anfrage:
mypage.aspx?value=cat+dog (NOT ENCODED)
Route Config
static void RegisterRoutes(RouteCollection routes)
{
routes.MapRouteLowercase(
name: "MyRouter",
url: "mypage.aspx",
defaults: new { controller = "My", action = "DoLog" }
);
}
Controller:
public class MyController : Controller
{
[AllowAnonymous]
public ActionResult DoLog(string value)
{
//Here value has "cat dog"
}
}
Ist C#. Als ich es gepostet, aber ich denke, es spielt keine Rolle, es ist kein code Problem, ich habe zum senden der parameter ohne codieren, also brauche ich nur, wie soll der server wissen, dass die URL ohne Kodierung.
Was ist Ihre Anforderung? Ist es, um die codierten parameter e ist.g:
fwdgerhb+bhrth+ftrgbhr
in dem Fall, warum Sie nicht UrlEncode es selbst?Weil ich'have verteilte alten code ohne Codierung dieser Wert, und der controller ist kompatibel zu sein mit ihm
so was ist stoppen Sie die Kodierung, wenn es trifft den controller unter der Annahme, dass das, was Sie tun möchten (Sie haben nicht geklärt)?
InformationsquelleAutor dhalfageme | 2014-10-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, MVC automatisch URL-decodiert-action-Parameter, aber Sie können immer noch Zugriff auf die URL-kodierten version durch ein query-string. Wie Sie sehen können in dieser Frage: Ist MVC2 ASP.Net URLDecoding automatisch?
Können Sie auch versuchen, Zugriff auf eine server-variable mit dem Namen UNENCODED_URL. Weitere Informationen zu diesem Szenario finden Sie hier: URL Rewrite-Modul Konfiguration und Referenz
Ich weiß nicht, über die Existenz einer config-parameter, dies zu vermeiden. Und Sie cal auch die Verwendung von " var unicornName = requestQuery["Wert"]; brauchen, um urlEncode es wieder
Ich versuchte nun, um die URL-Codierung, die es auf dem server, aber die Codierung erfolgt umsehen, um die URL-Dekodierung erfolgt durch das MVC-framework. Zum Beispiel. Wenn ich die Zeichenfolge "/" es bleibt, wie "/" bei MVC dekodiert es, aber die URL-Codierung ist es wieder, bekomme ich "%2f", es ist also nicht gültig...
Sie probalbly dont die brauchen das doch..... Sie können auch versuchen zu finden eine server-variable mit dem Namen UNENCODED_URL. Weitere Informationen zu diesem Szenario finden Sie hier: iis.net/learn/extensions/url-rewrite-module/...
Ja, readingn UNENCODED_URL bekomme ich den richtigen Wert, vielen Dank
InformationsquelleAutor Marcelo Bezerra
Können Sie die folgenden zu greifen, die Abfrage-string manuell vom controller:
Oder, um es aus der Sicht:
Aber mal ehrlich, warum nicht einfach Kodieren Sie die Zeichenkette selbst, bevor Sie es durch die routing:
und dann, wenn Sie den Wert wieder:
Weg, So dass Sie die Kontrolle über Ihren string
Update
Können Sie auch Folgendes tun, damit Ihr routeConfig zu ermöglichen, die "+" Attribut:
Hier ist eine Frage, die Ihnen sagt, die Höhen und tiefen drehen Sie diese auf und aus: Ermöglicht Doppel-Flucht Gefährlich?
Nicht, ich bekomme auch die " + " - Zeichen als Leerzeichen
Als Ihr string ist noch nicht codiert, bevor Sie in die URL. Wenn ich versuche zu senden, die in der Zeichenkette 1+2 mit
HttpUtility.UrlEncode("1+2");
ich erhalten 1%252b2 die dann verwandelt sich zurück in 1+2 wenn ichHttpUtility.UrlDecode("1%252b2");
. Gibt es keine Möglichkeit, Sie können ändern, welche Werte kommen?Es ist nicht nur das "+", es ist ein beliebiges Zeichen, der Wert ist eine verschlüsselte Zeichenfolge
InformationsquelleAutor Termato