ASP.NET MVC in einem virtuellen Verzeichnis
-
06-07-2019 - |
Frage
Ich habe folgend in meinem Global.asax.cs
routes.MapRoute(
"Arrival",
"{partnerID}",
new { controller = "Search", action = "Index", partnerID="1000" }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
Meine SearchController wie folgt aussieht
public class SearchController : Controller
{
// Display search results
public ActionResult Index(int partnerID)
{
ViewData["partnerID"] = partnerID;
return View();
}
}
und Index.aspx einfach zeigt Viewdata [ "PartnerID"] im Moment.
Ich habe ein virtuelles Verzeichnis in IIS unter Windows XP als Test bezeichnet wird eingestellt.
Wenn ich darauf meinen Browser unter http: // localhost / Test / dann bekomme ich 1000 wie erwartet angezeigt. Allerdings, wenn ich versuche, http: // localhost / Test / 1000 ich eine Seite nicht gefunden Fehler. Irgendwelche Ideen?
Gibt es spezielle Überlegungen für MVC in einem virtuellen Verzeichnis ausgeführt wird?
Lösung
IIS 5.1 interpretiert Ihre URL, so dass seine für einen Ordner sucht 1000 unter dem Ordner mit dem Namen als Test bezeichnet. Warum ist das so?
Dies geschieht, weil IIS 6 nur ASP.NET aufruft, wenn es sich um eine sieht „Dateinamenerweiterung“ in der URL, die ist abzubildenden aspnet_isapi.dll (worin A C / C ++ ISAPI Filter für Aufrufen ASP.NET). Da Routing ist ein .NET IHttpModule genannt UrlRoutingModule, wird es nicht aufgerufen, es sei denn ASP.NET selbst bekommt aufgerufen, die nur geschieht, wenn aspnet_isapi.dll wird aufgerufen, die nur geschieht, wenn ein ASPX gibt es in die URL. Also, keine aspx, nein UrlRoutingModule, daher die 404.
Die einfachste Lösung ist:
Wenn Sie nichts dagegen nicht mit aspx in Ihrem URLs, gehen Sie einfach durch Ihren Routing Config, das Hinzufügen ASPX-, bevor ein in jedem Muster Schrägstrich. Zum Beispiel Verwendung {} ASPX- Controller / {Aktion} / {id} oder myapp.aspx / {Controller} / {Aktion} / {id}. Legen Sie ASPX nicht innerhalb der geschweiften Klammer Parameternamen, oder in die ‚default‘ Werte, weil es nicht wirklich Teil des Controller-Namen - es ist nur in der URL IIS gerecht zu werden.
Quelle: http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/
Andere Tipps
Wenn Sie diese auf Windows XP tun, dann sind Sie mit IIS 5.1. Sie müssen ASP.Net erhalten Sie Ihre Anfrage zu bearbeiten. Sie müssen entweder eine Erweiterung Ihrer Routen hinzufügen ({Controller} .mvc / {Aktion} / {id}) und dass die Erweiterung auf ASP.Net Karte oder alle Anfragen an ASP.Net kartieren. Die http:. // localhost / Test funktioniert, weil es DEFAULT.ASPX geht, die in MVC-Projekte speziell behandelt wird
Darüber hinaus müssen Sie angeben, http: // localhost / Test / Search / Index / 1000 . Die Controller und die Aktion Stücke sind nicht optional, wenn Sie eine ID angeben möchten.
Es gibt eine Reihe von Überlegungen bei der virtuellen Verzeichnisse in Ihrer Anwendung verwenden.
Eine besondere ist, dass die meisten Browser keine Cookies senden, die von einem virtuellen Verzeichnis in ein anderes kam, auch wenn die Anwendungen auf demselben Server befinden.
Versuchen Sie setzen virtuellen Pfad. Rechtsklick auf mvc Projekt, Eigenschaften, Webregisterkarte gibt geeigneten Ort eingeben