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

asp.net 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中执行更多操作:

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

asp.net mvc路由

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值