Ist es möglich, einen ASP.NET MVC-route, basierend auf einer subdomain?
Ist es möglich ein ASP.NET MVC-route, die verwendet subdomain Informationen, um zu bestimmen, Ihre route? Zum Beispiel:
- user1.domain.com geht um einen Ort,
- user2.domain.com geht zu einem anderen?
Oder kann ich es so machen, beide gehen auf die gleichen controller/action mit ein username
parameter?
Implementiert habe ich eine ähnliche Art von Sache, die für multi-vermieteten-Anwendungen, sondern über eine abstrakte Basisklasse Controller, anstatt eine benutzerdefinierte Route Klasse. Mein blog-post es ist hier.
Sicher sein, zu prüfen dieses Ansatzes: http://blog.tonywilliams.me.uk/asp-net-mvc-2-routing-subdomains-to-areas ich fand es besser für die Einführung der Mandantenfähigkeit, um meine app als die anderen Antworten, denn MVC-Bereiche sind eine schöne Möglichkeit zur Einführung von Mieter-spezifische Controller und views in einer organisierten Art und Weise.
Ich denke, du solltest es als Antwort, dies ist, was ich schließlich als basis für meine Lösung.
Danke. Es war eine Antwort, aber ein moderator baute es zu einem Kommentar aus Gründen, die ich nicht verstehen kann.
Tony ist wie gebrochen war. Hier ist eine, die für mich gearbeitet: blog.tonywilliams.mich.uk/...
Sicher sein, zu prüfen dieses Ansatzes: http://blog.tonywilliams.me.uk/asp-net-mvc-2-routing-subdomains-to-areas ich fand es besser für die Einführung der Mandantenfähigkeit, um meine app als die anderen Antworten, denn MVC-Bereiche sind eine schöne Möglichkeit zur Einführung von Mieter-spezifische Controller und views in einer organisierten Art und Weise.
Ich denke, du solltest es als Antwort, dies ist, was ich schließlich als basis für meine Lösung.
Danke. Es war eine Antwort, aber ein moderator baute es zu einem Kommentar aus Gründen, die ich nicht verstehen kann.
Tony ist wie gebrochen war. Hier ist eine, die für mich gearbeitet: blog.tonywilliams.mich.uk/...
InformationsquelleAutor Dan Esparza | 2008-11-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie tun, indem Sie eine neue route und hinzufügen, um die Routen-Kollektion in RegisterRoutes in Ihr global.asax. Unten ist ein sehr einfaches Beispiel für eine benutzerdefinierte Route:
Ich nannte die route SubdomainRoute und fügte hinzu, es als erste diese Strecke: die Routen.Add(new SubdomainRoute());
Ist dieser Ansatz erfordert harte Codierung eine Liste der möglichen sub-domains?
Nein, können Sie ein Datenbankfeld namens etwas wie "subdomain", die du wirst sein, was Sie erwarten, dass die subdomain für einen bestimmten Benutzer, oder sonst was ist, dann tun Sie einfach eine Suche auf der subdomain.
Könnte jemand empfehlen, eine version von webforms?
InformationsquelleAutor Jon Cahill
Zu erfassen die subdomain, unter Beibehaltung der standard-MVC5-routing-Funktionen, verwenden Sie die folgende
SubdomainRoute
Klasse abgeleitetRoute
.Darüber hinaus
SubdomainRoute
ermöglicht die subdomain Optional angegeben werden als query-parameter, so dasssub.example.com/foo/bar
undexample.com/foo/bar?subdomain=sub
entspricht. Dies ermöglicht Ihnen zu testen, bevor die DNS-subdomains konfiguriert sind. Die Abfrage-parameter (wenn in Gebrauch) wird vermehrt durch neue links generiertUrl.Action
usw.Den query-parameter ermöglicht auch das lokale Debuggen mit Visual Studio 2013 ohne Konfiguration mit netsh oder als Administrator ausführen. Standardmäßig wird IIS Express bindet nur an localhost, wenn nicht erhöht; es wird nicht binden Synonym Hostnamen wie sub.localtest.mir.
Für die Bequemlichkeit, rufen Sie die folgende
MapSubdomainRoute
Methode von IhremRegisterRoutes
Methode genauso, als würden Sie plain oldMapRoute
:Schließlich, um bequem Zugriff auf die subdomain (entweder aus einem echten subdomain oder ein query-parameter), ist es hilfreich, einen Domänencontroller zu erstellen Basisklasse mit diesem
Subdomain
Eigenschaft:Ich mag dieses. Sehr einfach, und mehr als genug für mein Projekt.
Dies ist eine große Antwort. Gibt es eine Möglichkeit für das arbeiten mit ROUTING-Parametern? Ich versuche, diese Arbeit zu machen für die Pfade wie "subdomain.domain.com/portal/register" und Attribute verwenden würden dies erleichtern.
Attribut Routen sind nicht erweiterbar, wie übereinkommen aufgrund Routen sind. Der einzige Weg dazu wäre so etwas zu bauen Sie Ihre eigenen Attribut-routing-system.
InformationsquelleAutor Edward Brey
Dies ist nicht mein Werk, aber ich hatte, um es auf diese Antwort.
Hier ist eine großartige Lösung für dieses problem. Maartin Balliauw schrieb den code für die Erstellung DomainRoute Klasse, die verwendet werden können, sehr ähnlich wie das normale routing.
http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx
Sample verwenden würde, wie diese...
;
Ich weiß nicht, warum ich nicht kann diesen code ausführen... ich habe gerade erhalten
SERVER NOT FOUND
Fehler... bedeutet der code ist nicht für mich arbeiten... sind Sie für das festlegen einer anderen Konfiguration oder was?!Ich habe eine Zusammenfassung meiner version des gist.github.com/IDisposable/77f11c6f7693f9d181bb
was ist MvcApplication.DNS-Suffix?
Wir haben gerade aussetzen der Basis der DNS-domain im Internet.config... typischer Wert wäre .example.org
InformationsquelleAutor Jim Blake
Erfassen die subdomain bei Verwendung Web-API, überschreiben die Aktion Selektor, um zu injizieren, eine
subdomain
query-parameter. Verwenden Sie dann die subdomain query-parameter in den Controller " Aktionen wie diese:Dieser Ansatz macht das Debuggen praktisch, da können Sie die Abfrage-parameter von hand bei der Verwendung localhost anstelle des tatsächlichen host-Namen (siehe standard MVC5 routing Antwort für details). Dies ist der code für Action Selector:
Ersetzen Sie die Standard-Aktion Selektor, indem diese
WebApiConfig.Register
:InformationsquelleAutor Edward Brey
Ja, aber Sie müssen erstellen Sie Ihre eigene route-handler.
In der Regel die route ist nicht bekannt, die domain, da die Anwendung eingesetzt werden könnte, um beliebigen Domäne und der Weg würde sich nicht darum die eine oder andere Weise. Aber in Ihrem Fall, dass Sie wollen, um die Basis den controller und die Aktion aus der Domäne, so dass Sie zum erstellen einer benutzerdefinierten route, die bewusst von der Domäne.
InformationsquelleAutor Nick Berardi
Ich erstellt Bibliothek für subdomain-routing die Sie erstellen können, eine solche route. Er arbeitet derzeit für eine .NET Core 1.1 und .NET Framework 4.6.1 wird aber aktualisiert werden, in Naher Zukunft. Dies ist, wie es funktioniert:
1) Anzeigen subdomain-route im Startup.cs
2) Controller/HomeController.cs
3), Die lib wird auch ermöglichen es Ihnen, URLs generieren und Formen. Code:
Generiert
<a href="http://user1.localhost:54575/Home/Index">User home</a>
Generierte URL wird auch davon abhängen, aktuellen host-Standort und schema.
Sie können auch html-Helfer für
BeginForm
undUrlHelper
. Wenn Sie möchten, können Sie auch verwenden neues feature namens tag Helfer (FormTagHelper
,AnchorTagHelper
)Dass die lib nicht, habe alle Unterlagen noch, aber es gibt einige tests und Proben Projekt so fühlen sich frei, um es zu erkunden.
InformationsquelleAutor Mariusz
In ASP.NET Kern, der host ist über
Request.Host.Host
. Wenn Sie möchten, erlauben Sie das überschreiben der host über einen query-parameter, überprüfen Sie zunächstRequest.Query
.Verursachen eine host query-parameter zu propagieren, um in new route-basierte URLs fügen Sie diesen code, um das
app.UseMvc
route-Konfiguration:Und definieren
HostPropagationRouter
wie diese:InformationsquelleAutor Edward Brey
Nach der Definition einer neuen Route-handler, der schaut auf die host-URL übergeben, können Sie gehen mit der Idee, einen Basis-Controller, die bewusst von der Seite ist es, auf die zugegriffen wird. Es sieht wie folgt aus:
ISiteProvider
ist eine einfache Schnittstelle:Verweise ich Sie gehen zu Luke Sampson Blog
InformationsquelleAutor Amirhossein Mehrvarzi
Wenn Sie auf der Suche bei dem MultiTenancy-Fähigkeiten, um Ihr Projekt mit verschiedenen domains/subdomains für die einzelnen Mieter haben, sollten Sie einen Blick auf SaasKit:
https://github.com/saaskit/saaskit
Code Beispiele können hier gesehen werden: http://benfoster.io/blog/saaskit-multi-tenancy-made-easy
Einige Beispiele für die Verwendung von ASP.NET Kern: http://andrewlock.net/forking-the-pipeline-adding-tenant-specific-files-with-saaskit-in-asp-net-core/
BEARBEITEN:
Wenn Sie nicht möchten, verwenden Sie SaasKit in Ihrem ASP.NET core-Projekt können Sie einen Blick auf Maarten Umsetzung von domain-routing für MVC6: https://blog.maartenballiauw.be/post/2015/02/17/domain-routing-and-resolving-current-tenant-with-aspnet-mvc-6-aspnet-5.html
Aber die Gist sind nicht gepflegt und optimiert werden müssen, um die Arbeit mit der neuesten Version von ASP.NET core.
Direkten link zu dem code: https://gist.github.com/maartenba/77ca6f9cfef50efa96ec#file-domaintemplateroutebuilderextensions-cs
InformationsquelleAutor Darxtar
Ich vor einigen Monaten entwickelt haben, ist ein Attribut, das schränkt Methoden oder Controller auf bestimmte Domänen.
Es ist ganz einfach zu verwenden:
Können Sie den Antrag auch direkt auf einen controller.
Einschränkung:
Sie möglicherweise nicht in der Lage sein, zwei gleiche Strecken auf unterschiedlichen Methoden mit verschiedenen filtern
Ich meine die folgenden möglicherweise eine Ausnahme für die doppelte Strecke:
InformationsquelleAutor Jean