Heim Backend-Entwicklung C#.Net-Tutorial Tutorial zum Binden eines Domänennamens der zweiten Ebene an eine bestimmte Controller-Instanz

Tutorial zum Binden eines Domänennamens der zweiten Ebene an eine bestimmte Controller-Instanz

Jun 17, 2017 am 10:24 AM
Domainname der zweiten Ebene 控制器

In diesem Artikel wird hauptsächlich beschrieben, wie der Second-Level-Domain-Name an einen bestimmten Controller in Asp.net Core MVC gebunden wird. Freunde, die ihn benötigen, können darauf verweisen

Anwendungsszenarien: Unternehmensportale richten unterschiedliche Abschnitte entsprechend unterschiedlichen Inhalten ein, z. B. verfügt Sina ü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 erfolgt 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 einige Arbeit leisten und den Code direkt eingeben:


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
Nach dem Login kopieren

Abschließend können wir die entsprechenden Regeln im Startup registrieren, wie folgt:


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
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonTutorial zum Binden eines Domänennamens der zweiten Ebene an eine bestimmte Controller-Instanz. 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

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

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 kalibrieren Sie Ihren Xbox One-Controller richtig unter Windows 11 So kalibrieren Sie Ihren Xbox One-Controller richtig unter Windows 11 Sep 21, 2023 pm 09:09 PM

Da Windows zur Gaming-Plattform der Wahl geworden ist, ist es umso wichtiger, seine spielorientierten Funktionen zu identifizieren. Eine davon ist die Möglichkeit, einen Xbox One-Controller unter Windows 11 zu kalibrieren. Mit der integrierten manuellen Kalibrierung können Sie Abweichungen, zufällige Bewegungen oder Leistungsprobleme beseitigen und die X-, Y- und Z-Achse effektiv ausrichten. Wenn die verfügbaren Optionen nicht funktionieren, können Sie jederzeit ein Xbox One-Controller-Kalibrierungstool eines Drittanbieters verwenden. Finden wir es heraus! Wie kalibriere ich meinen Xbox-Controller unter Windows 11? Bevor Sie fortfahren, stellen Sie sicher, dass Sie Ihren Controller an Ihren Computer anschließen und die Treiber Ihres Xbox One-Controllers aktualisieren. Installieren Sie nebenbei auch alle verfügbaren Firmware-Updates. 1. Nutzen Sie Wind

Wie verwende ich das CodeIgniter4-Framework in PHP? Wie verwende ich das CodeIgniter4-Framework in PHP? May 31, 2023 pm 02:51 PM

PHP ist eine sehr beliebte Programmiersprache und CodeIgniter4 ist ein häufig verwendetes PHP-Framework. Bei der Entwicklung von Webanwendungen ist die Verwendung von Frameworks sehr hilfreich. Sie können den Entwicklungsprozess beschleunigen, die Codequalität verbessern und die Wartungskosten senken. In diesem Artikel wird die Verwendung des CodeIgniter4-Frameworks vorgestellt. Installation des CodeIgniter4-Frameworks Das CodeIgniter4-Framework kann von der offiziellen Website (https://codeigniter.com/) heruntergeladen werden. Runter

Laravel von Grund auf lernen: Detaillierte Erklärung des Controller-Methodenaufrufs Laravel von Grund auf lernen: Detaillierte Erklärung des Controller-Methodenaufrufs Mar 10, 2024 pm 05:03 PM

Laravel von Grund auf lernen: Detaillierte Erklärung des Controller-Methodenaufrufs Bei der Entwicklung von Laravel ist Controller ein sehr wichtiges Konzept. Der Controller dient als Brücke zwischen dem Modell und der Ansicht und ist für die Verarbeitung von Routenanforderungen und die Rückgabe entsprechender Daten an die Ansicht zur Anzeige verantwortlich. Methoden in Controllern können über Routen aufgerufen werden. In diesem Artikel wird detailliert beschrieben, wie Methoden in Controllern geschrieben und aufgerufen werden, und es werden spezifische Codebeispiele bereitgestellt. Zuerst müssen wir einen Controller erstellen. Sie können zum Erstellen das Artisan-Befehlszeilentool verwenden

Was ist ein Laravel-Controller? Was ist ein Laravel-Controller? Jan 14, 2023 am 11:16 AM

In Laravel ist ein Controller (Controller) eine Klasse, die zur Implementierung bestimmter Funktionen verwendet wird; der Controller kann zugehörige Anforderungsverarbeitungslogik in einer separaten Klasse kombinieren. Einige Methoden werden im Controller gespeichert, um bestimmte Funktionen zu implementieren. Der Controller wird über Routing aufgerufen, und Rückruffunktionen werden nicht mehr im Verzeichnis „app/Http/Controllers“ gespeichert.

Laravel Study Guide: Best Practices für Controller-Methodenaufrufe Laravel Study Guide: Best Practices für Controller-Methodenaufrufe Mar 11, 2024 am 08:27 AM

Im Laravel-Lernleitfaden ist das Aufrufen von Controller-Methoden ein sehr wichtiges Thema. Controller fungieren als Brücke zwischen Routing und Modellen und spielen eine wichtige Rolle in der Anwendung. In diesem Artikel werden die Best Practices für den Aufruf von Controller-Methoden vorgestellt und spezifische Codebeispiele bereitgestellt, um den Lesern das Verständnis zu erleichtern. Lassen Sie uns zunächst die Grundstruktur von Controller-Methoden verstehen. In Laravel werden Controller-Klassen normalerweise im Verzeichnis app/Http/Controllers gespeichert. Jede Controller-Klasse enthält mehrere

Kostenloser Prozess zur Beantragung eines Second-Level-Domainnamens Kostenloser Prozess zur Beantragung eines Second-Level-Domainnamens Jan 23, 2024 am 11:09 AM

Anwendungsschritte: 1. Rufen Sie die Website des Domainnamen-Registrierungsdienstes auf, registrieren Sie ein Konto und melden Sie sich an. 2. Wählen Sie den Dienst „Domainnamenregistrierung“, geben Sie den Domainnamen der zweiten Ebene ein, den Sie registrieren möchten, und klicken Sie auf „Abfrage“. Der Domänenname der zweiten Ebene wurde noch nicht registriert. Klicken Sie dann auf die Schaltfläche „Jetzt registrieren“, um sich zu registrieren. 4. Geben Sie auf der Seite mit den Registrierungsinformationen den Namen, die Kontaktnummer, die E-Mail-Adresse und andere Informationen des Domänennameninhabers ein und legen Sie fest ein Passwort; 5. Bestätigen Sie die Zahlungsmethode und schließen Sie die Zahlung ab. 6. Das Warten auf die offizielle Überprüfung dauert in der Regel 1-5 Werktage.

So verwenden Sie Controller zur Verarbeitung von Ajax-Anfragen im Yii-Framework So verwenden Sie Controller zur Verarbeitung von Ajax-Anfragen im Yii-Framework Jul 28, 2023 pm 07:37 PM

Im Yii-Framework spielen Controller eine wichtige Rolle bei der Bearbeitung von Anfragen. Zusätzlich zur Verarbeitung regulärer Seitenanfragen können Controller auch zur Verarbeitung von Ajax-Anfragen verwendet werden. In diesem Artikel wird erläutert, wie Ajax-Anfragen im Yii-Framework verarbeitet werden, und es werden Codebeispiele bereitgestellt. Im Yii-Framework kann die Verarbeitung von Ajax-Anfragen über die folgenden Schritte erfolgen: Erstellen Sie zunächst eine Controller-Klasse (Controller). Sie können die vom Yii-Framework bereitgestellte grundlegende Controller-Klasse yiiwebCo erben

Wie verwende ich Controller-Parameter im Symfony-Framework? Wie verwende ich Controller-Parameter im Symfony-Framework? Jun 04, 2023 pm 03:40 PM

Das Symfony-Framework ist ein beliebtes PHP-Framework, das auf der MVC-Architektur (Model-View-Controller) basiert. In Symfony sind Controller eine der Schlüsselkomponenten, die für die Verarbeitung von Webanwendungsanfragen verantwortlich sind. Parameter in Controllern sind bei der Verarbeitung von Anfragen sehr nützlich. In diesem Artikel wird die Verwendung von Controller-Parametern im Symfony-Framework vorgestellt. Grundkenntnisse über Controller-Parameter Controller-Parameter werden durch Routing an den Controller übergeben. Routing ist eine Zuordnung von URIs (Uniform Resource Identifiers) zu Controllern und

See all articles