ホームページ バックエンド開発 C#.Net チュートリアル 第 2 レベルのドメイン名を特定のコントローラー インスタンスにバインドするチュートリアル

第 2 レベルのドメイン名を特定のコントローラー インスタンスにバインドするチュートリアル

Jun 17, 2017 am 10:24 AM
セカンダリドメイン コントローラ

この記事では主に、Asp.net Core MVC の特定の コントローラー に第 2 レベルのドメイン名をバインドする方法を紹介します。それを必要とする友人はそれを参照できます。

アプリケーション シナリオ: エンタープライズ ポータルは、 Sina にはスポーツ、エンターテイメント チャンネルなど、さまざまなコンテンツを設定します。場合によっては、Sina Sports sports.sina.com.cn など、セクションごとに異なる第 2 レベルのドメイン名を設定する必要があります。

asp.net core mvc では、セクションの効果を実現したい場合、セクションごとに異なるコントローラーを作成できます (もちろん、他のテクノロジもあります。実装の品質についてはここでは説明しません)。この場合、たとえば、スポーツ コントローラを介してシステムにアクセスする場合、スポーツ チャネルに対応するコントローラは、SportController と呼ばれます。

上記のシナリオが完了したら、それを実装する方法を見てみましょう。

asp.net core mvc にはルーティング ルールの設定があります。設定は Startup.Configure メソッドにあります。具体的なコードは次のとおりです。


app.UseMvc(routes =>
{
   routes.MapRoute(
      name: "default",
      template: "{controller=Home}/{action=Index}/{id?}",
      defaults: new { area="admin"});
});
ログイン後にコピー

残念ながら、ドメイン名のサポートはサポートされていません。現時点では理解していますが、ご質問があれば修正してください)。 Router.MapRouter を通じてルーティング ルールを登録し、それらを RouteCollection に追加します。 リクエストが届くと、最初に一致する IRouter が見つかるまで、RouterCollection は登録されているすべての IRouter オブジェクトをループします。フレームワークはドメイン名設定ルールをサポートしていませんが、第 2 レベルのドメイン名決定ロジックを実装するために IRouter を実装できます。具体的な実装コードは次のとおりです。上記のコードはドメイン名の検出のみを確認しましたが、ドメイン名を特定のコントローラーに送信するには、この IRouter を登録するときにいくつかの記事を実行し、コードを直接入力する必要があります:


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);
   }
 }
ログイン後にコピー

最後に、スタートアップで実行できます。対応する登録ルールは次のとおりです:


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;
    }
}
ログイン後にコピー

以上が第 2 レベルのドメイン名を特定のコントローラー インスタンスにバインドするチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Windows 11 で Xbox One コントローラーを適切に調整する方法 Windows 11 で Xbox One コントローラーを適切に調整する方法 Sep 21, 2023 pm 09:09 PM

Windows がゲーム プラットフォームとして選ばれるようになったため、そのゲーム指向の機能を特定することがさらに重要になっています。その 1 つは、Windows 11 で Xbox One コントローラーを調整する機能です。組み込みの手動キャリブレーションを使用すると、ドリフト、ランダムな動き、またはパフォーマンスの問題を取り除き、X、Y、Z 軸を効果的に調整できます。利用可能なオプションが機能しない場合は、いつでもサードパーティの Xbox One コントローラー調整ツールを使用できます。確認してみましょう! Windows 11 で Xbox コントローラーを調整するにはどうすればよいですか?続行する前に、コントローラーをコンピューターに接続し、Xbox One コントローラーのドライバーを更新していることを確認してください。この作業中に、利用可能なファームウェアのアップデートもインストールします。 1. 風を利用する

PHPでCodeIgniter4フレームワークを使用するにはどうすればよいですか? PHPでCodeIgniter4フレームワークを使用するにはどうすればよいですか? May 31, 2023 pm 02:51 PM

PHP は非常に人気のあるプログラミング言語であり、CodeIgniter4 は一般的に使用される PHP フレームワークです。 Web アプリケーションを開発する場合、フレームワークを使用すると、開発プロセスのスピードアップ、コードの品質の向上、メンテナンス コストの削減が可能になり、非常に役立ちます。この記事ではCodeIgniter4フレームワークの使い方を紹介します。 CodeIgniter4 フレームワークのインストール CodeIgniter4 フレームワークは、公式 Web サイト (https://codeigniter.com/) からダウンロードできます。下

Laravelをゼロから学ぶ:コントローラーメソッド呼び出しの詳細説明 Laravelをゼロから学ぶ:コントローラーメソッド呼び出しの詳細説明 Mar 10, 2024 pm 05:03 PM

Laravelをゼロから学ぶ:コントローラーメソッド呼び出しの詳細解説 Laravelの開発において、コントローラーは非常に重要な概念です。コントローラーはモデルとビューの間のブリッジとして機能し、ルートからのリクエストを処理し、対応するデータを表示のためにビューに返す責任を負います。コントローラー内のメソッドはルートから呼び出すことができます。この記事では、コントローラー内のメソッドの記述方法と呼び出し方法を詳しく紹介し、具体的なコード例を示します。まず、コントローラーを作成する必要があります。 Artisan コマンド ライン ツールを使用して、

Laravelコントローラーとは何ですか Laravelコントローラーとは何ですか Jan 14, 2023 am 11:16 AM

laravel では、コントローラー (Controller) は特定の機能を実装するために使用されるクラスであり、コントローラーは関連するリクエスト処理ロジックを別のクラスに結合できます。一部のメソッドは、特定の機能を実装するためにコントローラーに保存されます。コントローラーはルーティングを通じて呼び出され、コールバック関数は使用されなくなり、コントローラーは「app/Http/Controllers」ディレクトリに保存されます。

Laravel スタディガイド: コントローラーメソッド呼び出しのベストプラクティス Laravel スタディガイド: コントローラーメソッド呼び出しのベストプラクティス Mar 11, 2024 am 08:27 AM

Laravel 学習ガイドでは、コントローラー メソッドの呼び出しは非常に重要なトピックです。コントローラーはルーティングとモデルの間のブリッジとして機能し、アプリケーションで重要な役割を果たします。この記事では、コントローラー メソッド呼び出しのベスト プラクティスを紹介し、読者の理解を助ける具体的なコード例を示します。まず、コントローラー メソッドの基本構造を理解しましょう。 Laravel では、コントローラー クラスは通常 app/Http/Controllers ディレクトリに保存され、各コントローラー クラスには複数のものが含まれます。

無料のセカンドレベルドメイン名の申請プロセス 無料のセカンドレベルドメイン名の申請プロセス Jan 23, 2024 am 11:09 AM

申し込み手順: 1. ドメイン名登録サービス Web サイトにアクセスし、アカウントを登録してログインします; 2. 「ドメイン名登録」サービスを選択し、登録したいセカンドレベル ドメイン名を入力し、[クエリ] をクリックします; 3.セカンドレベルドメイン名が登録されていない場合は、「今すぐ登録」ボタンをクリックして登録できます; 4. 登録情報ページで、ドメイン名の所有者の名前、連絡先番号、電子メールなどの情報を入力し、設定します。パスワード; 5. 支払い方法を確認し、支払いを完了します; 6. 正式な審査を待つには、通常 1 ~ 5 営業日かかります。

Yii フレームワークでコントローラーを使用して Ajax リクエストを処理する方法 Yii フレームワークでコントローラーを使用して Ajax リクエストを処理する方法 Jul 28, 2023 pm 07:37 PM

Yii フレームワークでは、コントローラーはリクエストの処理において重要な役割を果たします。通常のページ リクエストの処理に加えて、コントローラーを使用して Ajax リクエストを処理することもできます。この記事では、Yii フレームワークで Ajax リクエストを処理する方法を紹介し、コード例を示します。 Yii フレームワークでは、Ajax リクエストの処理は次の手順で実行できます。 最初の手順は、コントローラー (Controller) クラスを作成することです。 Yii フレームワークが提供する基本コントローラークラス yiiwebCo を継承できます。

Symfony フレームワークでコントローラーのパラメーターを使用するにはどうすればよいですか? Symfony フレームワークでコントローラーのパラメーターを使用するにはどうすればよいですか? Jun 04, 2023 pm 03:40 PM

Symfony フレームワークは、MVC (Model-View-Controller) アーキテクチャに基づいて設計された人気のある PHP フレームワークです。 Symfony では、コントローラーは Web アプリケーションのリクエストの処理を担当する重要なコンポーネントの 1 つです。コントローラーのパラメーターはリクエストを処理するときに非常に便利です。この記事では、Symfony フレームワークでコントローラーのパラメーターを使用する方法を紹介します。コントローラー パラメーターの基礎知識 コントローラー パラメーターは、ルーティングを通じてコン​​トローラーに渡されます。ルーティングは、URI (Uniform Resource Identifier) をコントローラーにマッピングし、

See all articles