ASP.NET MVC IgnoreRoute () nach Domäne

8

UPDATE: Umformulierung für Prägnanz ...

Bei einem ASP.NET MVC-Projekt ist es möglich, dass die web.config -Regelregeln Vorrang vor MVCs RegisterRoutes() -Anruf haben ODER IgnoreRoute nur für eine bestimmte Domäne aufgerufen werden kann!

Ich habe eine einzige MVC-Anwendung, die Verkehr über mehrere Domains ( meinedomain.com und otherdomain.com ) akzeptiert, die Anwendung bedient unterschiedliche Inhalte basierend auf dem angeforderten Host ( dh es ist Multi-Tenant).

Ich habe einen URL-Rewrite (einen Reverse-Proxy) konfiguriert in web.config , der nur für einen bestimmten Host gelten sollte:

%Vor%

Allerdings wird eine MVC-Anwendung anscheinend nur web.config konfigurierte Routen berücksichtigen, wenn sie von der RegisterRoutes() -Methode der Anwendung mit:

ignoriert werden %Vor%

Was dann die Ignorierung auf beide Domains anwendet . Vorschläge sehr geschätzt ...

    
DannyT 14.02.2018, 18:15
quelle

3 Antworten

1
  

kann IgnoreRoute nur für eine bestimmte Domäne aufgerufen werden?

Ja. Da Domänen standardmäßig von .NET-Routing vollständig ignoriert werden, müssen Sie das Routing anpassen, um IgnoreRoute für Domänen spezifisch zu machen.

Während es möglich ist, die Unterklasse RouteBase zu erstellen, ist die einfachste Lösung, ein benutzerdefinierte Route Constraint und verwenden Sie diese Option, um die Domänen zu steuern, denen eine bestimmte Route entspricht. Routenbeschränkungen können mit den vorhandenen Erweiterungsmethoden MapRoute , MapPageRoute und IgnoreRoute verwendet werden. Dies ist die am wenigsten invasive Lösung für eine bestehende Konfiguration.

DomainConstraint

%Vor%

Beachten Sie, dass die obige Klasse zu Testzwecken einen Abfragezeichenfolgenparameter akzeptiert, wenn die Anwendung im Debugmodus kompiliert wird. Dadurch können Sie eine URL wie

verwenden %Vor%

um die Einschränkung lokal zu testen, ohne den lokalen Webserver und die Hosts-Datei konfigurieren zu müssen. Diese Debugging-Funktion wurde aus dem Release-Build herausgenommen, um mögliche Fehler (Schwachstellen) in der Produktionsanwendung zu vermeiden.

Verwendung

%Vor%
  

HINWEIS: Es gibt eine Überladung, die den Parameter constraints für alle integrierten Routenerweiterungen akzeptiert, einschließlich IgnoreRoute und Bereichsrouten.

Referenz: Ссылка

    
NightOwl888 22.02.2018 14:05
quelle
0

Anstelle von IgnoreRoute verwenden Sie bitte Ignorieren

%Vor%     
mano 20.02.2018 12:55
quelle
0
  

ist es möglich, dass die web.config Umschreibungsregeln Vorrang vor MVCs RegisterRoutes() ?

haben

Ja. Beachten Sie, dass einige vorhanden sind Unterschiede zwischen IIS URL Rewriting und ASP.NET Routing :

    Das
  1. URL-Rewriting wird verwendet, um URL-Pfade zu manipulieren, bevor die Anfrage erfolgt vom Webserver verarbeitet werden. Das URL-Rewriting-Modul weiß es nicht welcher Handler wird schließlich die umgeschriebene URL verarbeiten. Im Darüber hinaus weiß der tatsächliche Anforderungshandler möglicherweise nicht, dass die URL vorhanden ist wurde umgeschrieben.
  2. ASP.NET-Routing wird verwendet, um eine Anfrage an einen Handler basierend auf zu senden der angeforderte URL-Pfad Im Gegensatz zu URL-Umschreiben, das Routing Modul weiß über die Handler und wählt den Handler, der sollte generieren Sie eine Antwort für die angeforderte URL. Sie können sich ASP.NET vorstellen Routing als fortgeschrittener Handler-Mapping-Mechanismus.
  

Kann IgnoreRoute nur für eine bestimmte Domäne aufgerufen werden?

Laut MSDN können Sie die Version verwenden, die akzeptiert url als Parameter. Aber für die gleiche Domain! Beachten Sie, dass es bei der Arbeit mit mehreren Domänen in der ASP.NET MVC-Anwendung einige Nachteile gibt:

  • Alle Routing-Logik ist fest codiert: Wenn Sie eine neue mögliche hinzufügen möchten Route, müssen Sie dafür codieren.
  • Die ASP.NET MVC-Infrastruktur arbeitet basierend auf VirtualPathData Klasse. Nur Token im URL-Pfad werden zum Routing verwendet.

Wenn Sie eine einzelne MVC-App verwenden möchten, die mehrere Domänen verwaltet und diese jeweils anders verteilt, müssen Sie mit dem MVC-Routing umgehen . Es ist jedoch möglich, eine benutzerdefinierte Site-Route zu verwenden, die erbt von RouteBase .

Lassen Sie uns nun folgendes besprechen:

  

routes.IgnoreRoute("proxy"); Wendet die Ignorierung auf beide an   Domänen.

Ich glaube, die -Regel funktioniert nicht perfekt , da die Verarbeitung bis zu ASP.NET-Routing reicht! möglicher Grund könnte in ServiceModel tag innerhalb web.config gefunden werden. Fügen Sie den serviceHostingEnvironment Code wie folgt hinzu:

%Vor%

Dadurch können Routen durch IIS geleitet werden.

Ändern Sie auch <match url="proxy/(.*)" /> in <match url="^proxy/(.*)" /> (mit einem zusätzlichen ^ ), was weit verbreitet ist.

    
Amirhossein Mehrvarzi 22.02.2018 09:54
quelle