2014-01-13 5 views
5

Meine Frage istWarum bekomme ich den Gelben Bildschirm des Todes auf einem Umbraco SurfaceController auf einer Standard/OOTB Umbraco Installation?

Welche Konfigurationsschritt habe ich verpasst Mvc Oberflächen Controller arbeiten in Umbraco zu machen?

Meine Theorie ist, dass, da es ein Ordner in der Standardeinstellung ist Umbraco /umbraco/ genannt installieren, die mit dem CMS zu verbinden, dass der physikalische Pfad der Route wird interfiering /umbraco/surface/{Controller}/{Action} somit in der ASP.NET YSOD resultierenden (und einem IIS 404 wenn ich versuche, auf dieser Strecke einen Controller zuzugreifen, die nicht definiert ist.)


Hintergrundinformationen


Ich habe diese Klasse zu meinem App_Code Ordner in einer frisch heruntergeladene Kopie von Umbraco 6.1.6 hinzugefügt:

public class MembersController : SurfaceController 
{ 
    public ActionResult Index() 
    { 
     return Content("Hello, Member!"); 
    } 
} 

Wenn ich zu navigieren, was ich denke sollte der Weg für meine Index() Methode sein, ich YSOD bekommen, die sagt, die Ressource nicht gefunden werden kann: angezeigt wird, und der obige Fehler wird nicht ausgeführt

YSOD for route to path

der Code; aber wenn ich die Uri Müll ändern erhalte ich ein IIS 404-Fehler:

IIS 404 error for route to non-existing path

Ich begann diese in einer bestehenden Website bekommen, um meine Seite zu denken war vermasselt habe ich versucht, es in einer neuen Kopie von Umbraco 6.1 .6 und bekam genau die gleichen Ergebnisse.

Für den Rekord habe ich auch versucht MembersSurfaceController und seine zugehörige Uri, die genau das gleiche Ergebnis wie oben hat. YSOD, wenn ich die gültige Route und IIS 404 wenn nicht.

Ich habe meine umbracoSettings.config zu MVC im Verzeichnis /config/ geändert.


Update


Ich bin mit der Out-of-the-box web.config-Datei, die diese hat:

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <remove name="UrlRewriteModule" /> 
     <add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" /> 
     . 
     .. 
     ... 

Auf meinem Standard Umbraco Website I don Es sind keine Rewrite-Regeln definiert. Aber auf meiner aktuellen Seite habe ich mehrere Regeln zum Umschreiben. Ich denke, dass es nicht verursacht, da ich das gleiche Verhalten auf beiden Seiten sehe, obwohl ...

Ich habe versucht, UrlRewrite vollständig zu entfernen Ich bekomme die gleichen Ergebnisse.


+0

Haben Sie überprüft, ob Sie das UrlRewrite-Modul in IIS benötigen? Es könnte sich lohnen, dies zu überprüfen ... –

+0

Ich bin mir nicht sicher, was Sie meinen, ich benutze die out-of-the-box-Datei web.config. – Nate

+3

Ich kann dieses Problem replizieren, aber nur, indem ich meine Controller in den App_Code-Ordner (Umbraco v6.1.3) setze - wenn sie eingehalten werden, scheint es kein Problem zu geben. Es ist eine lange Geschichte, aber könnten Sie die Controller kompilieren (indem Sie eine Klassenbibliothek hinzufügen, die Controller dorthin verschieben und der Klassenbibliothek einen Verweis auf Ihre Website hinzufügen, wenn Ihr Projekt eine Website ist) und es erneut versuchen? – milquetoastable

Antwort

3

Der folgende Ansatz funktioniert für mich in Umbraco 7.1, und ich erwarte, dass es in 6 funktioniert.Auch 1:

Erstellen Sie Ordner namens "Controller" in Ihrem App_Code-Ordner, und setzen Sie Ihre Oberflächen-Controller dort (so dass sie im Namespace "Controllers" sein werden).

z. Ich habe folgende Controller in App_Code \ Controllers Ordner (und damit im Namensraum ‚Controller‘):

namespace Controllers 
{ 
    public class ServiceCentersController : SurfaceController 
    { 
     public ActionResult GetServiceCenters(string country = "", string region = "", string city = "") 
     { 
     ... 
     } 
    } 
} 

Meine Seite auf localhost läuft, so kann ich, indem Sie zu den GetServiceCenters Aktion aufrufen:

http://localhost/umbraco/Surface/ServiceCenters/GetServiceCenters?country=aa&region=bb&city=cc 
+3

Um meinen Controller zum Laufen zu bringen, musste ich den Code 'namespace Controllers {..}' manuell zu meiner Datei hinzufügen. Der Ordnername scheint nicht wichtig zu sein, nur der tatsächliche Namespace. Es scheint auch, dass das Verwenden einer Website-Projektdatei => Neu den Namespace wie in einem Webanwendungsprojekttyp einfügt. – Nate

+0

Erstellst du dafür auch im Backoffice irgendwelche zugehörigen Sachen? Gibt es eine Verbindung zwischen den Datentypen im Backoffice und den Oberflächencontrollern? –

+0

Sie benötigen kein spezielles Setup im Backoffice, um den Oberflächencontroller zu erstellen, wie in der Antwort beschrieben. Beachten Sie, dass Sie durch den Zugriff auf die SurfaceController-Klasse Zugriff auf Umbraco-APIs erhalten, die Zugriff auf die CMS-Daten bieten, die durch die im Back-Office angegebenen Datentypen dargestellt werden. – anikiforov

0

Sie benötigen einen Namespace für Ihren Controller - die oben gepostet Code keinen Namespace:

public class MembersController : SurfaceController 
{ 
    public ActionResult Index() 
    { 
     return Content("Hello, Member!"); 
    } 
} 

That Deshalb macht es einen Namespace von Controllers funktioniert ... aber Sie könnten dies jeden logisch benannten Namespace machen, den Sie wollen.