0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[ASP.NET Core] Webアプリのルーティングについての理解

Posted at

対象ソフト

以下公式のリアルタイムのWebアプリのチュートリアルで作成したもの
https://docs.microsoft.com/ja-jp/aspnet/core/tutorials/signalr?view=aspnetcore-3.1&tabs=visual-studio-code

これはdotnet new webappで作成したWebアプリになります。

ルートパスのView

アプリケーションを起動し、ブラウザからhttp://localhost:xxxx/にアクセスすると、
/Pages/Index.cshtmlが表示さます。

これはASP.NET Core 2.0 以降、Razor Pages の機構によるもののようです。

Hub、WebSocket周りの関連性

以下コードのendpoints.MapHub<ChatHub>("/chatHub");部分ですが、
<ChatHub>はハブのクラスを指定し、
("/chatHub")でWebSocket接続を待ち受けるURLを指定しています。

Startup.cs

    // ... 省略

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddRazorPages(); // Razor Pages有効化
            services.AddSignalR();
            services.AddSingleton<app>();
        }

    // ... 省略

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            // ... 省略

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapRazorPages();
                endpoints.MapHub<ChatHub>("/chatHub");
            });
        }

ルートパスにアクセスした際に表示されるIndex.cshtmlには対応するスクリプトとして
chat.jsが指定されています。

Index.cshtml

<!-- 省略 -->

<script src="~/js/chat.js"></script>

chat.jsには/chatHubに対してWebSocketを接続する処理があります。

chat.js
var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();

// ...省略

connection.start().then(function () {
    document.getElementById("sendButton").disabled = false;
}).catch(function (err) {
    return console.error(err.toString());
});

MVCの場合

対象のソフトとしては、以下のチュートリアルで作成したものです。
https://docs.microsoft.com/ja-jp/aspnet/core/tutorials/first-mvc-app/start-mvc?view=aspnetcore-3.1&tabs=visual-studio

dotnet new mvcでプロジェクトを作成しています。
こちらはRazor Pages の機構を使用していない作りになっています。

以下コードのpattern: "{controller=Home}/{action=Index}/{id?}");でURLパターンを指定していますが、controller=Homeで指定されるHomeは、URLで指定されなかった場合のデフォルト値になります。
action=Indexで指定しているIndexについても同様にデフォルト値です。

pattern: "{controller}/{action}/{id?}");でも問題ありません。
その場合、URLとしてはlocalhost:xxxx/Home/Indexのようにアクセスすることになります。

Startup.cs
// ...省略

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            // ...省略

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });
        }

controller=HomeHomeとは、
Controllersフォルダ以下のHomeController.csになります。
action=IndexIndexとは、以下コードのIndex関数になります。

// 省略

    public class HomeController : Controller
    {
        // ...省略

        public IActionResult Index()
        {
            return View();
        }

     // ...省略
    }

また上記コードで実行しているreturn View();によって、
Views/Home/Index.cshtmlがクライアントに返却されます。

以上によって、localhost:xxxx/にアクセスした際にViews/Home/Index.cshtmlの内容が表示されます。

以下のようにページを返さないパターンもあります。

        public string Index()
        {
            return "This is my default action...";
        }
0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?