如何在ASP.NET Core 3.0 MVC中使用终结点路由

ASP.NET Core MVC是ASP.NET MVC框架的.NET Core副本。 您可以利用“模型-视图-控制器”设计模式利用ASP.NET Core MVC来构建跨平台,可扩展的高性能Web应用程序和API。 ASP.NET Core利用路由的优势将传入的请求映射到相应的控制器操作。

您可以从我之前的文章“ 揭秘: ASP.NET Core中的路由”中学习ASP.NET Core中的路由基础。 本文讨论了如何在ASP.NET Core 3.0 MVC中使用终结点路由。

[ 同样在InfoWorld上:什么是敏捷方法论? [现代软件开发讲解 ]

端点路由是ASP.NET Core中新引入的功能,使您可以向请求处理管道中的中间件提供路由信息。 在引入端点路由之前,ASP.NET Core MVC中的路由解析是在请求处理管道的末尾执行的。 结果,在请求处理管道中的MVC中间件之前,任何处理请求的中间件都不知道路由信息(例如需要执行哪种操作方法)。 顺便说一下,终结点路由是ASP.NET 3.0和更高版本的一部分。

端点路由将HTTP请求在中间件管道的早期而不是末尾匹配到端点。 这允许管道中的中间件稍后访问已解析的端点并应用其他处理。 换句话说,端点路由解耦了路由匹配和端点调度功能,使您可以灵活地在应用程序中组合不同的中间件(MVC,CORS,Razor Pages,Blazor等)。

若要使用本文提供的代码示例,您应该在系统中安装Visual Studio 2019。 如果没有副本,则可以在此处下载Visual Studio 2019

创建一个ASP.NET Core MVC项目

首先,让我们在Visual Studio中创建一个ASP.NET Core项目。 假设系统中已安装Visual Studio 2019,请按照以下概述的步骤在Visual Studio中创建新的ASP.NET Core MVC项目。

  1. 启动Visual Studio IDE。
  2. 点击“创建新项目”。
  3. 在“创建新项目”窗口中,从显示的模板列表中选择“ ASP.NET Core Web应用程序”。
  4. 点击下一步。
  5. 在接下来显示的“配置新项目”窗口中,指定新项目的名称和位置。
  6. 单击创建。
  7. 在“创建新的ASP.NET Core Web应用程序”窗口中,从顶部的下拉列表中选择.NET Core作为运行时,并选择ASP.NET Core 3.0(或更高版本)。
  8. 选择“ Web应用程序(模型-视图-控制器)”作为项目模板。
  9. 确保未选中“启用Docker支持”和“配置HTTPS”复选框,因为我们此处将不再使用这些功能。
  10. 确保将身份验证设置为“无身份验证”,因为我们也不会使用身份验证。
  11. 单击创建。

这将在Visual Studio中创建一个新的ASP.NET Core项目。 在本文的后续部分中,我们将使用该项目来实现端点路由。

在ASP.NET Core 3.0 MVC中创建新的控制器

在解决方案资源管理器窗口中,选择项目中的Controllers文件夹,右键单击,然后单击Add-> Controller…以创建新的控制器。 将控制器类的名称指定为AuthorController。 接下来,用以下代码替换AuthorController类的代码。

[Route("api/[controller]")]
    [ApiController]
    public class AuthorController : ControllerBase
    {
        readonly Repository repository = new Repository();
        [HttpGet]
        public ActionResult GetAuthors()
        {
            var records = repository.GetAllAuthors();
            return Ok(records);
        }
    }

我们将在本文的后续部分中使用AuthorController。

了解ASP.NET Core中的路由

路由是一项功能,可公开端点并将传入的HTTP请求与控制器的操作方法进行匹配。 与Microsoft.AspNetCore.Routing命名空间有关的路由中间件负责处理请求和响应,检查请求并将它们与端点匹配,甚至修改在请求处理管道中流动的请求和响应消息。

约定路由与属性路由

您可以通过两种不同的方式在操作方法中指定路由-基于约定的路由和基于属性的路由。

以下代码段说明了如何在Startup类的Configure方法中使用约定路由。

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Author}/{action=GetAuthors}/{id?}");
});

使用基于属性的路由时,您会在控制器或操作方法上提及路由。 您可以为同一操作方法定义多个路由。 这是一个说明这一点的例子。

public class AuthorController : Controller
{
    [Route("")]
    [Route("Home")]
    [Route("Home/Index")]
    public IActionResult Index()
    {
        return View();
    }
     [Route("Home/GetAuthor/{id:int}")]
    public IActionResult GetAuthor(int id)
    {
        ViewBag.Id = id;
        return View();
    }
}

ASP.NET Core 3.0 MVC中的路由定义

当您创建新的ASP.NET Core 3.0 MVC应用程序时,Visual Studio将为您创建默认路由。 这就是它的外观。

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

此处显示的路由定义由两个参数组成-路由名称和路由模式。 该路由将匹配以下URL。

/Home/Index
/Author/Index
/Author/Index/12

ASP.NET Core 3.0 MVC中的UseRouting与UseEndpoints

路由利用了一对使用UseRouting和UseEndpoints扩展方法注册的中间件组件。 前者用于将请求匹配到端点,而后者用于执行匹配的端点。

请注意,UseRouting中间件应配置在所有其他中间件(包括身份验证,授权和任何自定义中间件)之前。 相比之下,UseEndpoints中间件应在最后配置。 下面的代码段对此进行了说明。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }
            app.UseStaticFiles();
            app.UseRouting();
            app.UseAuthorization();
            app.UseEndpoints(endpoints =>
            {
               endpoints.MapControllerRoute(
               name: "default",
               pattern: "{controller=Author}/{action=GetAuthor}/{id?}");
            });
        }

如果要在运行时检查路由元数据,则可以使用以下代码并在Visual Studio中对其进行调试。

app.Use(async (context, next) =>
{
 var endPoint = context.GetEndpoint();
 var routes = context.Request.RouteValues;
});

在ASP.NET Core 3.0 MVC中配置路由

您可以在ASP.NET Core 3.0 MVC应用程序中轻松设置路由。 为此,您需要对Startup类进行一些更改。 首先,您应该调用AddRazorPages方法,如下所示。

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();
}

接下来,应调用MapRazorPages方法,如下所示。 调用此方法时,会将Razor Pages服务,选项和约定添加到管道中。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
           //Usual code
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapRazorPages();
                endpoints.MapControllerRoute(
                name: "default",
                pattern:
                "{controller=Author}/
                 {action=GetAuthor}/{id?}");
            });
        }

在ASP.NET Core 3.0 MVC中使用命名路由

请注意,可以为路由指定名称,以便可以使用具有相同参数的多个路由。 这样的路由称为命名路由。 以下代码段说明了如何使用命名路由。

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

在ASP.NET Core 3.0 MVC中设置路由默认值

您还可以显式设置路由默认值,如下面的代码片段所示。

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

在ASP.NET Core 3.0 MVC中使用MapRazorPages

您可以利用MapRazorPages扩展方法来为Razor视图页面启用路由。 以下代码段显示了如何实现此目的。

app.UseEndpoints(endpoints =>
{
  endpoints.MapRazorPages();
});

在ASP.NET Core 3.0 MVC中使用混合路由

请注意,您可以对某些控制器和操作使用基于属性的路由,而在其他控制器和操作方法上使用基于约定的路由。 尽管同时使用这两种方法是完全有效的,但应注意,在同一操作方法中不能同时具有基于属性的路由和基于约定的路由。

ASP.NET 3.0为我们提供了一个可扩展的模块化框架,用于处理端点,URL和中间件。 在以后的文章中,我将更深入地讨论路由。 我们将探索ASP.NET Core 3.0中的高级路由功能,例如路由模板,路由约束,自定义路由约束等。

如何在ASP.NET和ASP.NET Core中执行更多操作:

From: https://www.infoworld.com/article/3541611/how-to-use-endpoint-routing-in-aspnet-core-30-mvc.html

评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符 “速评一下”
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页