ASP.NET Core中使用默認MVC路由


ASP.NET Core里Route這塊的改動不大,只是一些用法上有了調整,提供了一些更加簡潔的語法。

而對於自定義路由的支持當然也是沒有問題的,這個功能應該是從MVC1.0版本就已經有這個功能。

先看看ASP.NET Core里面實現默認MVC路由的配置方式

通常情況下,在使用MVC項目的時候,默認的路由就足夠了,就是常見的通過Controller和Action獲取具體的方法的方式。

從一個最基本的項目開始,執行以下步驟,就可以使得項目支持MVC路由

1.創建一個空白的ASP.NET Core(Empty) Web項目

2.打開project.json,在”dependencies”節點下增加如下依賴項目

"Microsoft.AspNetCore.Mvc": "1.0.0"

保存之后,項目會自動restore packages到本地

3.加入默認MVC路由配置

打開Startup.cs文件

在ConfigureServices方法,加入如下代碼

services.AddMvc();

這個擴展方法把Mvc的一些服務都注入到容器中

在Configure方法,注釋最后兜底的那個“hello world”語句,這個語句的作用是不管什么請求都它來負責。

 

然后在Configure方法加入如下代碼

app.UseMvcWithDefaultRoute();

這個擴展方法實際上使用了一個Middleware,默認的Url template跟之前MVC版本的一致,上述代碼等同於以下效果

app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "Default",
                    template: "{controller}/{action}/{id?}",
                    defaults: new {controller = "Home", action = "Index"}
                );
            });

最終的Startup.cs代碼如下

public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            //app.Run(async (context) =>
            //{
            //    await context.Response.WriteAsync("Hello World!");
            //});
            app.UseMvcWithDefaultRoute();
        }
    }

 

4.到此配置已經完成,但是運行站點直接顯示404,沒顯示Hello world說明已經生效了,只是Empty的項目沒有Controller,那么定義一個Controller吧。

手動在項目根目錄創建Controllers目錄,然后新建一個Controller,名字為HomeController,然后直接運行網站(應該刷新一下就可以了)。

站點繼續提示錯誤,但不是404了,是提示找不到Index這個View。

image

繼續在項目根目錄創建Views目錄,然后在Views目錄下新建一個Home目錄,在Home目錄新建一個Index.cshtml,填寫一些內容,再次刷新就可以了。

image

當然這是最基本的配置,比如要進一步支持在cshtml里面實現智能感知,支持靜態文件路由等還得加入更多的依賴和配置。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM