17.在 ASP.NET Core 中安装 MVC

421 阅读3分钟

本篇文章,我们将讨论在 ASP.NET Core 应用程序中设置 MVC。

我们使用的 ASP.NET Core 项目是使用"空"项目模板生成的,没有设置和安装 MVC。

两个步骤学会在 ASP.NET Core 配置 MVC

步骤 1:在 Startup.cs 文件中的 Startup 类的ConfigureServices()方法中,见下方代码。 这行代码将所需的 MVC 服务添加到 ASP.NET Core 中的依赖注入容器中。

 public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc(option => option.EnableEndpointRouting = false);
        }

步骤 2:在 Configure()方法中,将UseMvcWithDefaultRoute()中间件添加到我们的应用程序的请求处理管道中。 修改代码,如下所示。

  public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {               
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
            }
          
            //静态文件中间件
            app.UseStaticFiles();
            
            app.UseMvcWithDefaultRoute();
            
            app.UseRouting();

            app.Run(async (context) =>
            {

                await context.Response.WriteAsync("Hello World!");
            });
        }

注意,我们在UseMvcWithDefaultRoute()中间件之前放置了UseStaticFiles()中间件。 此顺序很重要,因为如果请求是针对静态文件(如图像,CSS 或 JavaScript 文件),则UseStaticFiles()中间件将处理请求并使管道的其余部分短路。

因此, 如果请求是针对静态文件, 则不会执行UseMvcWithDefaultRoute () 中间件, 从而避免不必要的处理。

另一方面, 如果请求是 MVC 请求, UseStaticFiles ()中间件将把该请求传递给 UseMvcWithDefaultRoute()中间件, 中间件将处理请求并生成响应。

请注意, 除了UseMvcWithDefaultRoute()中间件之外, 我们还有UseMvc ()中间件。这里, 我们使用 UseMvcWithDefaultRoute()中间件。 此时,如果我们运行应用程序并导航到 URL- http://localhost:32702 ,我们会看到"Hello World" 消息显示在浏览器中。 逻辑步骤:

  • 当我们向 URL 发出请求时 - http://localhost:32702
  • 由于请求不是针对静态文件,因此 UseStaticFiles()中间件会将请求传递给 UseMvcWithDefaultRoute()中间件
  • 由于我们尚未在 URL 中指定控制器和操作方法段,因此 UseMvcWithDefaultRoute()中间件在 HomeController 中查找 Index()方法。
  • 由于目前我们的应用程序中没有 HomeController,因此 UseMvcWithDefaultRoute()中间件将请求传递给使用 Run()方法注册的中间件,因此我们看到"Hello World!" 此中间件生成的消息。 现在让我们看看,如果我们删除 Run()中间件会发生什么。 此时,Configure()方法中的代码必须如下所示
  public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {               
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
            }

            //静态文件中间件
            app.UseStaticFiles();
            
            app.UseMvcWithDefaultRoute();
            
            app.UseRouting();
 
        }

有了上面的代码,如果我们再次向 URL 发出请求 - http://localhost:32702,我们现在看到 404 错误。 这是因为 UseMvcWithDefaultRoute()中间件没有找到带有 Index()动作的 HomeController,并且管道中没有其他中间件,所以我们看到 404 错误。

添加 HomeController

在项目根文件夹中添加 Controllers 文件夹。 在"控制器"中添加一个新的控制器。 复制并粘贴以下代码。

 public class HomeController : Controller
    {
        public string Index()
        {
            return "Hello from MVC";
        }
    }

生成解决方案并向应用程序 URL 发出请求 - http://localhost:32702。 现在,您将看到浏览器中显示的字符串 -  "Hello from MVC"

问题

创建的项目中如果有Pages文件夹,记得要删除此文件夹。因为下面有默认页面,运行代码会出现如下页面。

image.png

image.png