Heim Backend-Entwicklung C#.Net-Tutorial So binden Sie den Domänennamen der zweiten Ebene an einen bestimmten Controller in asp.net core mvc

So binden Sie den Domänennamen der zweiten Ebene an einen bestimmten Controller in asp.net core mvc

Jun 26, 2017 pm 03:19 PM
asp.net core Domainname der zweiten Ebene 如何 绑定

Aufgrund der Arbeitsvereinbarungen des Unternehmens habe ich mich mit anderen Technologien beschäftigt, sodass ich keine Zeit hatte, den Blog zu aktualisieren. Heute kann ich endlich mit meiner Arbeit aufhören und neue Inhalte schreiben.

Anwendungsszenarien: Unternehmensportale richten unterschiedliche Abschnitte entsprechend unterschiedlichen Inhalten ein, z. B. Sina verfügt über Sport-, Unterhaltungskanäle usw. In einigen Fällen ist es erforderlich, für verschiedene Abschnitte unterschiedliche Second-Level-Domainnamen festzulegen, z. B. Sina Sports sports.sina.com.cn.

Wenn Sie in asp.net core mvc den Effekt von Abschnitten erzielen möchten, können Sie unterschiedliche Controller für verschiedene Abschnitte erstellen (natürlich gibt es auch andere Technologien, die Qualität der Implementierung wird hier nicht besprochen). in diesem Fall, wie man einen eindeutigen Domänennamen der zweiten Ebene an den Controller bindet. Beispielsweise heißt der Controller, der dem Sportkanal entspricht, beim Zugriff auf das System über den Domänennamen sports.XXX.com SportController und übergeben Sie diesen Domänennamen der zweiten Ebene. Der Domänenname kann nicht auf andere Controller zugreifen.

Nachdem wir nun über das Szenario gesprochen haben, werfen wir einen Blick auf die Umsetzung.

Es gibt eine Routing-Regelkonfiguration in asp.net core mvc. Die Konfiguration befindet sich in der Startup.Configure-Methode. Der spezifische Code lautet wie folgt:

 

app.UseMvc(routes =>
{
      routes.MapRoute(
           name: "default",
           template: "{controller=Home}/{action=Index}/{id?}",
           defaults: new { area="admin"});
});
Nach dem Login kopieren

Leider werden keine Domain-Namen unterstützt (was ich bisher verstanden habe ist, dass Sie mich bei Problemen gerne korrigieren können). Registrieren Sie Routing-Regeln über „routes.MapRouter“ und fügen Sie sie zu „RouteCollection“ hinzu. Wenn eine Anfrage eingeht, durchläuft RouterCollection alle registrierten IRouter-Objekte, bis der erste passende IRouter gefunden wird. Obwohl das Framework keine Domänennamen-Konfigurationsregeln unterstützt, können wir einen IRouter selbst implementieren, um die Logik der Domänennamenbeurteilung der zweiten Ebene zu implementieren. Der spezifische Implementierungscode lautet wie folgt:

  public class SubDomainRouter : RouteBase
    {
        private readonly IRouter _target;
        private readonly string _subDomain;
        public SubDomainRouter(
           IRouter target,
           string subDomain,//当前路由规则绑定的二级域名
           string routeTemplate,
           RouteValueDictionary defaults,
           RouteValueDictionary constrains,
           IInlineConstraintResolver inlineConstraintResolver)
           : base(routeTemplate,
                  subDomain,
                  inlineConstraintResolver,
                  defaults,
                  constrains,
                  new RouteValueDictionary(null))
        {
            if (target == null)
            {
                throw new ArgumentNullException(nameof(target));
            }
            if (subDomain == null)
            {
                throw new ArgumentNullException(nameof(subDomain));
            }
            _subDomain = subDomain;
            _target = target;
        }
        public override Task RouteAsync(RouteContext context)
        {
            string domain = context.HttpContext.Request.Host.Host;//获取当前请求域名,然后跟_subDomain比较,如果不想等,直接忽略
           
            if (string.IsNullOrEmpty(domain) || string.Compare(_subDomain, domain) != 0)
            {
                return Task.CompletedTask;
            }
        
       //如果域名匹配,再去验证访问路径是否匹配

            return base.RouteAsync(context);
            
        }

        protected override Task OnRouteMatched(RouteContext context)
        {
            context.RouteData.Routers.Add(_target);
            return _target.RouteAsync(context);
        }

        protected override VirtualPathData OnVirtualPathGenerated(VirtualPathContext context)
        {
            return _target.GetVirtualPath(context);
        }
    }
Nach dem Login kopieren

Im obigen Code sehen wir nur die Erkennung von Domänennamen, aber um den Domänennamen an einen bestimmten Controller weiterzuleiten, müssen wir bei der Registrierung dieses IRouters etwas Arbeit leisten und direkt zum Code gehen:

public static class RouteBuilderExtensions
    {
        public static IRouteBuilder MapDomainRoute(
            this IRouteBuilder routeBuilder,string domain,string area,string controller)
        {
            if(string.IsNullOrEmpty(area)||string.IsNullOrEmpty(controller))
            {
                throw new ArgumentNullException("area or controller can not be null");
            }
            var inlineConstraintResolver = routeBuilder
                .ServiceProvider
                .GetRequiredService<IInlineConstraintResolver>();

                string template = "";

                    RouteValueDictionary defaults = new RouteValueDictionary();
                    RouteValueDictionary constrains = new RouteValueDictionary();
                    constrains.Add("area", area);
                    defaults.Add("area", area);
                    constrains.Add("controller", controller);
                    defaults.Add("controller", string.IsNullOrEmpty(controller) ? "home" : controller);
                    defaults.Add("action", "index");
                    
                    template += "{action}/{id?}";//路径规则中不再包含控制器信息,但是上面通过constrains限定了查找时所要求的控制器名称
                    routeBuilder.Routes.Add(new SubDomainRouter(routeBuilder.DefaultHandler, domain, template, defaults, constrains, inlineConstraintResolver));

            
            return routeBuilder;
        }
}
Nach dem Login kopieren

Schließlich können wir die entsprechenden Regeln im Startup registrieren, wie folgt:

app.UseMvc(
      routes =>
        {
            routes.MapDomainRoute("xxx.domain.com","areaname","controllername");
                        
            routes.MapRoute(
                  name: "default",
                  template: "{controller=Home}/{action=Index}/{id?}",
                  defaults: new { area = "web" });
        });
Nach dem Login kopieren

Die Implementierungsmethode ist vielleicht nicht die beste, aber Es erfüllt bereits die Grundbedürfnisse. Wenn Sie eine bessere Methode haben, können Sie diese gerne diskutieren und austauschen.

 

 

 

Das obige ist der detaillierte Inhalt vonSo binden Sie den Domänennamen der zweiten Ebene an einen bestimmten Controller in asp.net core mvc. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So aktivieren Sie die Speicherintegritätsfunktion von Core Isolation in Windows 11 So aktivieren Sie die Speicherintegritätsfunktion von Core Isolation in Windows 11 May 10, 2023 pm 11:49 PM

Microsofts Windows 11 2022 Update (22H2) aktiviert standardmäßig den Speicherintegritätsschutz von CoreIsolation. Wenn Sie jedoch eine ältere Version des Betriebssystems ausführen, beispielsweise Windows 11 2022 Update (22H1), müssen Sie diese Funktion manuell aktivieren. Aktivieren Sie die Speicherintegritätsfunktion von CoreIsolation in Windows 11. Für Benutzer, die sich mit Core Isolation nicht auskennen: Es handelt sich um einen Sicherheitsprozess, der grundlegende Kernaktivitäten unter Windows vor Schadprogrammen schützen soll, indem er sie im Speicher isoliert. Dieser Prozess gewährleistet in Kombination mit der Speicherintegritätsfunktion

Können zwei WeChat-Konten an dieselbe Bankkarte gebunden werden? Können zwei WeChat-Konten an dieselbe Bankkarte gebunden werden? Aug 25, 2023 pm 03:13 PM

Zwei WeChat-Konten können nicht an dieselbe Bankkarte gebunden werden. Verknüpfen Sie eine Bankkarte mit einem WeChat-Konto: 1. Öffnen Sie die WeChat-Anwendung, klicken Sie auf die Option „Ich“ und wählen Sie dann die Option „Bezahlen“ 2. Wählen Sie die Option „Bankkarte hinzufügen“ und geben Sie die Bankkarteninformationen ein, wenn Sie dazu aufgefordert werden 3. Sobald die Bankkarte erfolgreich gebunden ist, können Benutzer die Bankkarte für Zahlungen und Überweisungen in WeChat verwenden.

Was bedeutet Computerkern? Was bedeutet Computerkern? Sep 05, 2022 am 11:24 AM

Kern hat in Computern zwei Bedeutungen: 1. Der Kern, auch Kern genannt, ist der wichtigste Teil der CPU. Alle Berechnungen, die Annahme von Speicherbefehlen und die Verarbeitung von Daten der CPU werden vom Kern durchgeführt. Core ist der Prozessorname von Intel. Core ist die Prozessormarke, die Intel nach dem Pentium-Prozessor eingeführt hat. Derzeit werden Core-Prozessoren der zwölften Generation herausgebracht.

So implementieren Sie bearbeitbare Tabellen in Vue So implementieren Sie bearbeitbare Tabellen in Vue Nov 08, 2023 pm 12:51 PM

Tabellen sind ein wesentlicher Bestandteil vieler Webanwendungen. Tabellen enthalten normalerweise große Datenmengen, daher erfordern Tabellen einige spezifische Funktionen, um die Benutzererfahrung zu verbessern. Eine der wichtigen Funktionen ist die Bearbeitbarkeit. In diesem Artikel untersuchen wir, wie bearbeitbare Tabellen mit Vue.js implementiert werden, und stellen spezifische Codebeispiele bereit. Schritt 1: Daten vorbereiten Zuerst müssen wir die Daten für die Tabelle vorbereiten. Wir können ein JSON-Objekt verwenden, um die Daten der Tabelle zu speichern und sie in der Dateneigenschaft der Vue-Instanz zu speichern. In diesem Fall

BTCC-Tutorial: Wie kann ich die MetaMask-Wallet an der BTCC-Börse binden und verwenden? BTCC-Tutorial: Wie kann ich die MetaMask-Wallet an der BTCC-Börse binden und verwenden? Apr 26, 2024 am 09:40 AM

MetaMask (auf Chinesisch auch Little Fox Wallet genannt) ist eine kostenlose und beliebte Verschlüsselungs-Wallet-Software. Derzeit unterstützt BTCC die Bindung an die MetaMask-Wallet. Nach der Bindung können Sie sich mit der MetaMask-Wallet schnell anmelden, Werte speichern, Münzen kaufen usw. und bei der erstmaligen Bindung einen Testbonus von 20 USDT erhalten. Im BTCCMetaMask-Wallet-Tutorial stellen wir detailliert vor, wie man MetaMask registriert und verwendet und wie man das Little Fox-Wallet in BTCC bindet und verwendet. Was ist die MetaMask-Wallet? Mit über 30 Millionen Nutzern ist MetaMask Little Fox Wallet heute eines der beliebtesten Kryptowährungs-Wallets. Die Nutzung ist kostenlos und kann als Erweiterung im Netzwerk installiert werden

Wie binde ich ein Unterkonto auf Xiaohongshu? Wie prüft es, ob das Konto normal ist? Wie binde ich ein Unterkonto auf Xiaohongshu? Wie prüft es, ob das Konto normal ist? Mar 21, 2024 pm 10:11 PM

Im heutigen Zeitalter der Informationsexplosion wird der Aufbau einer persönlichen Marke und eines Unternehmensimages immer wichtiger. Als führende Fashion-Life-Sharing-Plattform in China hat Xiaohongshu die Aufmerksamkeit und Beteiligung vieler Nutzer auf sich gezogen. Für diejenigen Nutzer, die ihren Einfluss erweitern und die Effizienz der Inhaltsverbreitung verbessern möchten, ist die Bindung von Unterkonten ein wirksames Mittel geworden. Wie bindet Xiaohongshu also ein Unterkonto? Wie kann ich überprüfen, ob das Konto normal ist? Dieser Artikel beantwortet diese Fragen ausführlich für Sie. 1. Wie binde ich ein Unterkonto auf Xiaohongshu? 1. Melden Sie sich bei Ihrem Hauptkonto an: Zuerst müssen Sie sich bei Ihrem Xiaohongshu-Hauptkonto anmelden. 2. Öffnen Sie das Einstellungsmenü: Klicken Sie oben rechts auf „Ich“ und wählen Sie dann „Einstellungen“. 3. Geben Sie die Kontoverwaltung ein: Suchen Sie im Einstellungsmenü nach der Option „Kontoverwaltung“ oder „Kontoassistent“ und klicken Sie darauf

Schritte und Methoden, um Douyin in Toutiao zu binden Schritte und Methoden, um Douyin in Toutiao zu binden Mar 22, 2024 pm 05:56 PM

1. Öffnen Sie Toutiao. 2. Klicken Sie unten rechts auf „Mein“. 3. Klicken Sie auf [Systemeinstellungen]. 4. Klicken Sie auf [Konto- und Datenschutzeinstellungen]. 5. Klicken Sie auf die Schaltfläche auf der rechten Seite von [Douyin], um Douyin zu binden.

Wie binde ich die Cainiao-App an Pinduoduo? Wie füge ich den Cainiao Wrap zur Pinduoduo-Plattform hinzu? Wie binde ich die Cainiao-App an Pinduoduo? Wie füge ich den Cainiao Wrap zur Pinduoduo-Plattform hinzu? Mar 19, 2024 pm 02:30 PM

Die Cainiao-App ist eine Plattform, die Ihnen verschiedene Logistikinformationen liefern kann. Die Funktionen hier sind sehr leistungsstark und einfach zu verwenden. Wenn Sie logistische Probleme haben, können diese auf jeden Fall gelöst werden -Stopp-Service kann alles rechtzeitig lösen, die Expresslieferung abholen, versenden usw. Wir haben mit verschiedenen Plattformen zusammengearbeitet und können manchmal abgefragt werden Es kann vorkommen, dass die auf Pinduoduo gekauften Waren keine Logistikinformationen anzeigen können. Um dies zu erreichen, müssen Sie die spezifischen Methoden unten klären, und jeder kann einen Blick darauf werfen. So binden Sie Cainiao an ein Pinduoduo-Konto: 1. Öffnen Sie die Cainiao-App und gehen Sie zur Hauptseite

See all articles