ASP.NET Core MVC中的路由

ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门 一、前言 1、本文主要内容 ASP.NET Core MVC路由工作原理概述 ASP.NET Core MVC带路径参数的路由示例 ASP.NET Core MVC固定前/后缀的路由示例 ASP.NET Core MVC正则表达式匹配路由示例 ASP.NET Core MVC路由约束与自定义路由约束 ASP.NET Core MVC RouteAttribute绑定式路由使用介绍 2、本教程环... 阅读详情


ASP.NET Core MVC中的路由

​ ASP.NET Core中有两种路由技术,分别是常规路由和属性路由。

​ 我们先了解什么是路由,当来自浏览器的请求到达应用程序时,MVC中的控制器会处理传入的HTTP请求并响应用户操作,请求URL会被映射到控制器的操作方法上。此映射过程由应用程序中定义的路由规则完成。

​ 比如,当向/Home/Index发出请求时,此URL将映射到HomeController类中的Index()方法,如图所示:

在这里插入图片描述

​

​ 类似的,当向/Home/Details/1发出请求时,此URL将映射到HomeCaontroller类中的Details() 操作方法。URL中的值1自动映射到id,即Details(int id)的参数id。

在这里插入图片描述

​ 目前,我们还没有在ASP.NET Core MVC应用中明确定义任何路由规则。由此我们想到的问题是,这个URL(/Home/Index)如何映射到HomeController中的Index()方法。

ASP.NET Core MVC中的默认路由

​ 以下是Startup.cs文件中的Configure()方法,此方法中的代码设置HTTP请求处理管道。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseStaticFiles();

            app.UseMvcWithDefaultRoute();
        }

​ 在这个方法中,我们调用了UseMvcWithDefaultRoute()扩展方法。正是这种方法将MVC与默认路由添加到应用程序的请求处理管道中。

{Controller=Home}/{action=Index}/{id?}

​ 只需将鼠标悬停在VIsual Studio中的UseMvcWithDefaultRoute()上,就可以看到智能提示的默认路由了。
在这里插入图片描述

UseMvcWithDefaultRoute()方法中的代码

​ 为了方便读者快速参考,以下是来自Github的代码。注意,UseMvcWithDefaultRoute()方法内部调用了UseMvc()方法,通过它设置默认路由。

public static IApplicationBuilder UseMvcWithDefaultRoute(this IApplicationBuilder app)
{
    if (app == null)
    {
        throw new ArgumentNullException(nameof(app));
    }
    
    return app.UseMvc(route=>
                      {
                          routes.MapRoute(
                          	name:"default",
                              template:"{controller=Home}/{action=Index}/{id?}"
                          );
                      });
}

​

了解默认路由

​ 默认路由模板规则:{controller=Home}/{action=Index}/{id?},大多数的URL都会按照这个规则进行映射,具体如表所示:

路径段映射信息
/HomeHomeController类
/DetailsDetails(int id)方法
/1Details(int id)方法中的id参数

​ 请求流程说明如图所示:

在这里插入图片描述

  • 第一个URL路径段/Home映射到HomeController。在URL中,我们不用添加Controller这个后缀。当MVC在第一个URL路径段中找到单词Home时,它会附加单词Controller并查找名为HomeController的类。
  • 第二个URL路径段/Details映射到HomeController的Details(int id) 操作方法。
  • 第三个URL路径段1映射到Details(int id)方法的id参数。这个步骤被称为模型绑定。

请注意,在以下默认路由模板中,我们在id参数后面加一个问号,默认路由模板为{controller=Home}/{action=Index}/{id?},问号表示URL中的id参数可选。这意味着通过以下URL,都可以通过路由映射到StudentController类的Details()方法中。

  • /Student/Details/1
  • /Student/Details

{controller=Home}中的值Home是Controller的默认值。类似地,{action=Index}中的值Index是操作方法的默认值。

​ 因此,程序导航到应用程序根目录http://localhost:2051。因为URL中没有指定控制器名称和操作方法名称,所以将使用路有模板的默认值,路由会将请求映射到HomeController中的Index() 操作方法上。

同理,以下请求URL也将映射到HomeController类的Index()操作方法上。

  • http://localhost:2051/Home
  • http://localhost:2051/Home/Index

对于大多数应用程序,默认路由即可满足日常的开发工作需求,代码如下:

public class DepartmentsController:Controller
    {
        public string List()
        {
            return "我是Departments控制器的List()方法";
        }
        
        public string Details()
        {
            return "我是Departments控制器的Details()方法";
        }
    }

​ /Departments/list映射到DepartmentsController的List()方法,/Departments/Details映射到DepartmentsController的**Details()**方法。

​ 在这里插入图片描述

​ 如果要自定义路径模板并希望更多地控制路径,请使用UseMvc()方法来配置路由,而不是UseMvcWithDefaultRoute()方法,请参考以下代码修改Startup类地路由规则。

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

ASP.NET Core MVC中的属性路由

​ 请参考以下Startup.cs文件中的Configure()方法中的代码。请注意,我们使用的UseMvc()方法不包含默认路由模板,无法进行参数传递。

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseStaticFiles();

            app.UseMvc();

            //app.UseMvcWithDefaultRoute();
        }

​ 这意味着,目前应用程序没有配置任何的路由,当导航到以下任何URL时。我们会看到404错误❌。

属性路由示例

​ 使用Route()属性来定义路由,我们可以在Controller类或Controller()操作方法上应用Route()属性。

  public class HomeController : Controller
    {
      
      
        [Route("")]
        [Route("Home")]
        [Route("Home/Index")]
        public ViewResult Index()
        {
            return View();
        }

       //其他代码

    }

​ 在Index()操作方法上指定了3个不同的Route()属性。对于Route()属性的每个实例,我们指定了不同的路有模板。使用这3个路由规则,3个URL中都会访问HomeController的Index()操作方法。

​ 使用这3个路由模板,当遇到以下3个URL访问HomeController的Index()方法时,都会匹配成功并进入方法内。

  • /
  • /Home
  • /Home/Index

配置完成后运行项目,我们能正常访问项目首页。

属性路由参数

​ 使用传统路由,我们可以将路由参数指定为路由模板的一部分。当然属性路由也可以做同样的事,请看下面的例子。

public class HomeController : Controller
    {
        private readonly IStudentRepository _studentRepository;

        //使用构造函数注入的方式注入IStudentRepository
        public HomeController(IStudentRepository studentRepository)
        {
            _studentRepository = studentRepository;
        }

        [Route("")]
        [Route("Home")]
        [Route("Home/Index")]
        //返回学生的信息
        public ViewResult Index()
        {
            //查询所有的学生信息
            IEnumerable<Student> students = _studentRepository.GetAllStudents();
            //将学生列表传递到视图
            return View(students);
        }

        [Route("Home/Details/{id}")]
        public ViewResult Details(int id)
        {
            //实例化HomeDetailsViewModel并存储Student详细信息和PageTitle
            HomeDetailsViewModel homeDetailsViewModel = new HomeDetailsViewModel()
            {
                Student = _studentRepository.GetStudent(id),
                PageTitle = "学生详情"
            };
            //将ViewModel对象传递给View()方法
            return View(homeDetailsViewModel);
        }
	}

​ Details()方法具有id参数,此参数根据指定的id来查询学生的详细信息。

​ 请注意,在路由模板中我们指定了id参数。因此,URL(/Home/Details)将执行Details(int id) 方法,并将值1映射到Details(int id)的id参数。这是通过模型绑定来完成的。

属性路由可选参数

​ 当URL(/Home/Details/1)中具有id路由参数的值时,才执行HomeController的Details(int id)方法。如果URL中不存在id值,那么我们会得到404错误❌。

​ 比如,访问/Home/Details就不会执行Details(int id)方法,而是显示404错误。要使路由参数id可选,只需在末尾添加问号即可。

public class HomeController : Controller
    {
        private readonly IStudentRepository _studentRepository;

        //使用构造函数注入的方式注入IStudentRepository
        public HomeController(IStudentRepository studentRepository)
        {
            _studentRepository = studentRepository;
        }

        [Route("")]
        [Route("Home")]
        [Route("Home/Index")]
        //返回学生的信息
        public ViewResult Index()
        {
            //查询所有的学生信息
            IEnumerable<Student> students = _studentRepository.GetAllStudents();
            //将学生列表传递到视图
            return View(students);
        }

        [Route("Home/Details/{id?}")]
        public ViewResult Details(int? id)
        {
            //实例化HomeDetailsViewModel并存储Student详细信息和PageTitle
            HomeDetailsViewModel homeDetailsViewModel = new HomeDetailsViewModel()
            {
            //如果id为null,则使用1,否则使用路由属性中传递的值
                Student = _studentRepository.GetStudent(id??1),
                PageTitle = "学生详情"
            };
            //将ViewModel对象传递给View()方法
            return View(homeDetailsViewModel);
        }
	}

控制器和操作方法名称

​ 在属性路由中,控制器和操作方法名称不会影响属性路由名称,它们没有强关联关系。请看下面的示例。

 public class WelcomeController:Controller
    {
        [Route("WC")]
        [Route("WC/Index")]
        public string Welcome()
        {
            return "我是Welcome控制器中的welcome()方法";
        }
    }

​ 由于我们直接在操作方法上指定了路由模板,因此WelcomeController的Welcome()方法对以下两个URL都会执行。

在这里插入图片描述
在这里插入图片描述

属性路由支持多层

​ Route()属性也可以应用于Controller类以及各个操作方法中。为了使属性路由代码重复性减弱并提升可维护性,我们可以将Controller上的属性路由与各个操作方法的属性路由相结合。考虑下面的例子。

public class HomeController : Controller
    {
        private readonly IStudentRepository _studentRepository;

        //使用构造函数注入的方式注入IStudentRepository
        public HomeController(IStudentRepository studentRepository)
        {
            _studentRepository = studentRepository;
        }

        [Route("")]
        [Route("Home")]
        [Route("Home/Index")]
        //返回学生的信息
        public ViewResult Index()
        {
            //查询所有的学生信息
            IEnumerable<Student> students = _studentRepository.GetAllStudents();
            //将学生列表传递到视图
            return View(students);
        }


        //?使路由模板中的id参数为可选,如果要让它为必选,删除?即可
        [Route("Home/Details/{id?}")]
        public ViewResult Details(int id)
        {
            //实例化HomeDetailsViewModel并存储Student详细信息和PageTitle
            HomeDetailsViewModel homeDetailsViewModel = new HomeDetailsViewModel()
            {
                Student = _studentRepository.GetStudent(id),
                PageTitle = "学生详情"
            };
            //将ViewModel对象传递给View()方法
            return View(homeDetailsViewModel);
        }
	}

​ HomeController的Index() 方法匹配以下3中URL。

  • /
  • /Home
  • /Home/Index

HomeController的Details(int id) 操作方法匹配以下两种URL路径。

  • /Home/Details
  • /Home/Details/1(id参数)

正如读者所看到的,有很多重读的路由名称。我们对代码进行修改并精简,在HomeController类应用Route()属性。如下所示:

 [Route("Home")]
    public class HomeController : Controller
    {
        private readonly IStudentRepository _studentRepository;

        //使用构造函数注入的方式注入IStudentRepository
        public HomeController(IStudentRepository studentRepository)
        {
            _studentRepository = studentRepository;
        }

        [Route("")]
        [Route("Index")]
        //返回学生的信息
        public ViewResult Index()
        {
            //查询所有的学生信息
            IEnumerable<Student> students = _studentRepository.GetAllStudents();
            //将学生列表传递到视图
            return View(students);
        }


        //?使路由模板中的id参数为可选,如果要让它为必选,删除?即可
        [Route("Details/{id?}")]
        public ViewResult Details(int id)
        {
            //实例化HomeDetailsViewModel并存储Student详细信息和PageTitle
            HomeDetailsViewModel homeDetailsViewModel = new HomeDetailsViewModel()
            {
                Student = _studentRepository.GetStudent(id),
                PageTitle = "学生详情"
            };
            //将ViewModel对象传递给View()方法
            return View(homeDetailsViewModel);
        }
    }

​ 我们将应用于控制器操作方法的路由模板用到了控制器上。但是,当我们导航到http://localhost:1234的时候,HomeController的Index()方法将不会被执行,反而出现404页面错误❌。要解决这个问题,请在Index()操作方法中包含以 / 开头的路径模板,如下所示:

 		[Route("/")]
		[Route("")]
        [Route("Index")]
        //返回学生的信息
        public ViewResult Index()
        {
            //查询所有的学生信息
            IEnumerable<Student> students = _studentRepository.GetAllStudents();
            //将学生列表传递到视图
            return View(students);
        }

​ 需要记住的是,如果操作方法上的路与规则以 / 或 ~/ 开头,则Controller路由模板不会与操作方法的路由模板组合在一起。

在属性路由中自定义路由

​ 属性路由通过将标记放在方括号中来支持标记替换。标记[controller]与[action]将替换为定义路径的控制器名称和操作名称的值。代码如下所示:

  [Route("[controller]")]
    public class DepartmentsController:Controller
    {
        [Route("[action]")]
        public string List()
        {
            return "我是Departments控制器的List()方法";
        }
        
        [Route("[action]")]
        public string Details()
        {
            return "我是Departments控制器的Details()方法";
        }
    }

​ 使用[controller]和[action]标记,导航到URL路径中的/Departments/List将进入DepartmentsController中执行List()方法。类似地,在URL路径的/Departments/Details将进入DepartmentsController中执行Details()方法。

​ 这是一种非常强大的功能,因为如果要重命名控制器或操作方法名称,我们就不必更改模板路径,如将Departments修改为Some。

​ 要使List()方法成为DepartmentsController的默认路由入口,读者仍可以使用空字符串包含的Route("")属性,如下所示:

  [Route("[controller]")]
    public class DepartmentsController:Controller
    {
        [Route("[action]")]
        [Route("")]    //使List()成为默认路由入口
        public string List()
        {
            return "我是Departments控制器的List()方法";
        }
        
        [Route("[action]")]
        public string Details()
        {
            return "我是Departments控制器的Details()方法";
        }
    }

​ 我们最好只在控制器上设置一次,而不是在控制器的每个操作方法中都包含[action]标记,如下所示:

 [Route("[controller]/[action]")]
    public class DepartmentsController:Controller
    {
        public string List()
        {
            return "我是Departments控制器的List()方法";
        }
        
        public string Details()
        {
            return "我是Departments控制器的Details()方法";
        }
    }

常规路由与属性路由对比

​ 使用属性路由时,属性路由需要在实际使用它们的操作方法上方设置。属性路由比传统路由提供了更大的灵活性。通常情况下,常规路由用于服务HTML页面的控制器,而属性路由则用户服务RESTful API的控制器。

当然,这只是规范和建议,如果读者的应用程序需要有更多的路由灵活性,我们也可以将常规路由与属性路由混合使用。

ASP.NET Core 中新增的路由中间件

​ 虽然我们要讨论的核心是EndpointRouting(终结点路由),它是在ASP.NET Core 2.2中引入的,但在3.0版本中它成为ASP.NET Core的“一等公民”。

​ 首先打开在Startup.cs文件下的ConfigureServices() 方法,修改如下:

  public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews().AddXmlSerializerFormatters();

            services.AddSingleton<IStudentRepository, StudentRepository>();
        }

​ 修改后查看Startup类的Configure() 方法,会发现app.UseMvc()中间件弹出了警告。如图所示:

在这里插入图片描述

​ 警告告诉我们,UseMvc()中间件不支持Routing Endpoints()中间件,要继续使用UseMvc()中间件需将EnableEndpointRouting的值设置为false,这也是之前我们一直将AddControllersWIthViews服务的值设置为false的原因。

​ 那么现在产生一个问题——EndpointRouting是什么。

路由中间件UseRouting

​ 在了解EndpointRouting之前,我们先了解一下UseRouting()中间件,它是ASP.NET Core3.0后新增的路由中间价,其主要作用是启用路由 。

  • UseRouting()中间件主要用于验证EndpointRoute()中间件服务是否加载进来。
  • 具体实现路由的验证与模板规则由EndpointRoute()中间件来完成。
  • UseRouting() 中间件需要放置在UseStaticFiles()之后。

路由中间件UseEndpoints

​ UseEndpoints()将会替代原有的路由规则和模板,在以后的开发中,基本都会通过UseEndpoints来设置路由规则,官方将它命名为终结点路由。

​ 但是还有一个显而易见的问题没有解决,为什么要用UseEndpoints()呢,原有的路由中间件不好吗❓答案是原有的路由中间件功能不够丰富。

​ UseEndpoints是一个可以处理跨不同中间件系统(如MVC、Razor Pages、Blazor、SignalR和gRPC)的路由系统。 通过终结点路由可以使端点相互协作,并使系统比没有相互对话的终端中间件更全面。

当然在此,不会涉及Razor Pages、Blazor、SignalR和gRPC,但是为了项目的长远规划,dotnet开发团队推荐使用终结点路由。

  • UseEndpoints验证路由服务和EndpointRouting()中间件是否启用和注册到管道中。
  • 注册完毕后,改变中间件的配置,将路由规则运用到应用程序中。

接下来,我们利用UseEndpoints()中间件改造项目,代码如下:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseStaticFiles();

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

            //app.UseMvc();

            //app.UseMvcWithDefaultRoute();
        }
ASP.NET Core MVC 路由详解 方法中的注册顺序来确定的。因此,如果有多个路由规则匹配同一个 URL,那么将使用第一个匹配成功的规则。除了将传入的 URL 映射到控制器和动作方法外,ASP.NET Core MVC 还提供了路由生成的功能,可以根据路由规则生成 URL。上述代码中,我们定义了一个名为 “product” 的路由规则,它匹配以 “/products/” 开头的 URL,并将匹配的部分作为。上述代码中,我们定义了一个名为 “product” 的路由规则,它匹配以 “/products/” 开头的 URL,并将匹配的部分作为。 阅读详情

相关推荐

ISP图像处理Verilog仿真框架搭建(附代码)

基于Verilog的图像处理仿真框架搭建

路漫漫其修远兮,吾将上下而求索 1894

Asp.Net Core EndPoint 终结点路由工作原理解读

Asp.Net Core EndPoint 终点路由工作原理解读 一、背景 在本打算写一篇关于Identityserver4的文章时候,却发现自己对EndPoint-终结点路由还不是很了解,故暂时先放弃了IdentityServer4的研究和编写;所以才产生了今天这篇关于EndPoint(终结点路由) 的文章。 还是跟往常一样,打开电脑使用强大的Google 和百度搜索引擎查阅相关资料,以及打开Asp.net core 3.1 的源代码进行拜读,同时终于在我的实践及测试中对EndPoint有...

面朝大海,春暖花开 1603

量化实战:如何用Barra多因子模型给你的投资组合做一次‘风险体检’?

本文详细介绍了如何利用Barra多因子模型对投资组合进行全面的风险体检,帮助投资者识别行业和风格因子的风险暴露。通过实战案例和Python代码示例,展示了数据采集、风险归因和组合优化的完整流程,提升投资组合的风险调整收益。

weixin_27215337的博客 323

UseEndpoints和MapControllerRoute关系

文件的不同方法中使用它们来完成路由的配置工作,从而为应用程序的不同部分分别配置路由。都是用于配置路由的方法,但它们在应用程序中的不同位置和用途上有一些区别。用于配置应用程序的终结点,其中包括控制器路由作为其中的一部分。用于具体配置MVC框架的控制器路由规则。在ASP.NET Core中,

极客神殿 2515

手把手教你用三极管搭建麦克风音频放大电路(附完整电路图)

本文详细介绍了如何使用三极管搭建麦克风音频放大电路,包括电路设计基础、元件选择、完整电路图及分步焊接指南。通过实际操作和调试技巧,帮助电子爱好者和学生深入理解模拟电路原理,实现音质清晰的音频放大效果。

Black的专栏 982

STM32L051低功耗模式下LPUART的使用

STM32L0系列低功耗UART配置代码清单及注释,大家可参考学习使用。

嵌入式工程师 2098

.netcore入门16:aspnetcore之终结点路由工作原理

环境: .netcore 3.1.1.0 vs2019 16.4.5 试验目的: 探索什么是终结点路由,它和授权中间件、mvc是怎么协作的? 结论: 先说下结论,“路由”模块一前一后注册了两个中间件,第一个中间件匹配到了Controller的某个Action,第二个中间件去调用已经匹配到了的Action。“授权”模块会在这两个中间件之间注册一个中间件,所以授权模块在进行授权的时候可以明确当前的...

火焰 2617

ASP.NET Core端点路由 作用原理

端点路由(Endpoint Routing)最早出现在ASP.NET Core2.2,在ASP.NET Core3.0提升为一等公民。 Endpoint Routing的动机 在端点路由出现之前,我们一般在请求处理管道的末尾,定义MVC中间件解析路由。这种方式意味着在处理管道中,MVC中间件之前的中间件将无法获得路由信息。 路由信息对于某些中间件非常有用,比如CORS、认证中间件(认证过程可能会用到路由信息)。 同时端点路由提炼出端点概念,解耦路由匹配逻辑、请求分发。 Endpoint Routing中间

极客神殿 431

解码器选型参数,结构原理,工艺与注意问题总结

解码器芯片(Decoder Chip)是电子设备中的一个重要组件,通常用于处理、解释和输出存储在某种编码格式中的数据或信号。本文对解码器的工作原理,结构特点,工艺流程,选型参数及设计注意事项进行总结。

fydar的博客 1168

【原创教程】AB上位机FactoryTalk View的使用教程

条形图主要的作用就是根据绑定的变量中数字大小的变化来反映到图形中,随着数字的增加填充的颜色不断上升或随着数字的减小填充的颜色不断下降。绘图功能中常用的功能主要是:数字输入,数字输出,字符输入,字符输出,各种类型的的按钮,条状图,各类控件,系统自带的图形库。颜色指的是根据PLC变量的变化来改变图形的颜色,可以绑定BOOL量来显示两种颜色,也可以绑定字节,字,双字等来显示多种颜色。打开软件后右键点击画面选项然后点击新建则新建出一个画面,画面画好后点击保存并更改标题后新建的画面则会出现在画面选项的文件夹下。

Qinmingyue13的博客 4673

浅浅理解.net core的路由

默认路由模板,大多数的URL都会按照这个规则进行映射。问号表示 id 参数可有可无。 如果要定义自己的路径模板,要使用 UseMvc()方法,而不是 UseMvcWithDefaultRoute()方法。 属性路由: 使用属性路由,可以在Controller或 Controller 的操作方法上应用Route属性。在Startp.cs文件Configure方法中,我们只使用app.UseMvc();然后在Controller的Action方法上通过特性Route来配置。 在实际项目中运用到

hyyjiushiliangxing的博客 1898

【第1章>第5节】SOM自组织映射网络的理论学习与MATLAB仿真

自组织映射网络(Self-Organizing Map,SOM)是一种无监督学习的人工神经网络,由芬兰学者Teuvo Kohonen于1981年提出,也被称为Kohonen网络。它的主要功能是将高维输入数据映射到低维(通常是二维)的离散网格上,同时保持输入数据的拓扑结构,即相邻的输入数据在映射后的网格上也相邻。

FPGA/MATLAB学习教程/源码/项目合作开发 399

ASP.NET Core MVC之route简单路由配置

ASP.NET Core MVC的路由配置一般分为两种,约定路由和特性路由。下面分别介绍两种路由的配置方法。 一:约定路由 约定路由顾名思义,是我们约定好的路由规则,程序根据约定,访问对应的controller,首先建立一个ASP.NET Core Web项目,选择空模板,在Startup类中的ConfigureServices方法中注册MVC服务。 public void ConfigureSe...

weixin_39714231的博客 7454

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ASP.NET Core MVC中的路由(路由模板、属性路由)

Startup.cs文件中Configure()方法的代码设置HTTP请求处理管道。 一、默认路由模板:app.UseMvcWithDefaultRoute(); 默认路由模板规则是这样的:{controller=Home}/{action = Index}/{id?} 其中{id?}中的?表示此参数是可选的(非必填)。 二、自定义路由模板(常规路由): Startup.cs文件中Configure()方法里加这个: app.UseMvc(ro...

ppp17的博客 2960

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ASP.NET Core MVC 中的属性路由

ASP.NET Core MVC 中的属性路由ASP.NET Core MVC 中的属性路由 ASP.NET Core MVC 中的属性路由 属性路由使用时,需要在Configure里面注入app.UseMvc();,并且取消默认路由设置 使用属性路由,我们使用Route()属性来定义路由。 路由属性可应用于控制器或控制器中的操作方法上。 使用属性路由时,路由属性需要设置在实际使用它们的操作方法...

SpringWaterLikeMe 486

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ASP.NET Core MVC 之路由(Routing)

  ASP.NET Core MVC 路由是建立在ASP.NET Core 路由的,一项强大的URL映射组件,它可以构建具有理解和搜索网址的应用程序。这使得我们可以自定义应用程序的URL命名形式,使得它在搜索引擎优化(SEO)和链接生成中运行良好,而不用关心Web服务器上的文件是怎么组织的。我们可以方便的使用路由模板语法定义路由,路由模板语法支持路由值约束,默认值和可选值。   基于约束的路由允...

weixin_30625691的博客 874

ASP.NET Core MVC 配置全局路由前缀

今天给大家介绍一个 ASP.NET Core MVC 的一个新特性,给全局路由添加统一前缀。严格说其实不算是新特性,不过是Core MVC特有的

dotNET跨平台 1193

ASP.NET Core MVC 路由逻辑初探

说一下是怎么控制界面显示的,边用边写,看别人的文章大多太学术,以下是我看了一些视频教程后,浅显的理解,希望可以帮助新手同学学习。新建的项目的结构:在Program.cs中,框架创建了默认路由:}");其中各个属性说明:name表示路由名称,默认值为default。pattern 为匹配模板,默认值为"{controller=Home}/{action=Index}/{id?}"。

qq_59062726的博客 917

(8)ASP.NET Core2.2 中的MVC路由一

/第一个路由//第二个路由}");});第一个路由里{*article}是表示使用catch-all路由参数来捕获URL路径的剩余部分。下面我们通过测试来验证下:通过上述测试可以知道,加星号的路由在传参字符串中加了斜杠依然能够打开,没加星号的路由在传参字符串中加了斜杠就不能打开了。还有一点要注意的是controller.action接收参数必须跟*后面参数名称一致,不然会接收不到参数值。

wzk153的博客 786

ASP.NET Core MVC路由配置:从基础路由到高级路由模式的终极指南

想要构建高效、可维护的Web应用程序?ASP.NET Core MVC路由配置就是您必须掌握的核心技能!🚀 路由系统是MVC框架的"交通警察",负责将用户请求精准导航到正确的控制器和操作方法。无论您是初学者还是经验丰富的开发者,本指南将带您从基础路由配置到高级路由模式,全面提升您的ASP.NET Core开发能力。 ## 什么是ASP.NET Core MVC路由? ASP.NET Core

gitblog_00594的博客 996

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中的路由”中学习...

cxu0262的博客 472

ASP.NET Core MVC 源码学习:Routing 路由

前言 最近打算抽时间看一下 ASP.NET Core MVC 的源码,特此把自己学习到的内容记录下来,也算是做个笔记吧。 路由作为 MVC 的基本部分,所以在学习 MVC 的其他源码之前还是先学习一下路由系统,ASP.NET Core 的路由系统相对于以前的 Mvc 变化很大,它重新整合了 Web Api 和 MVC。 路由源码地址 :https://github.com/aspnet/Ro...

qq_40456031的博客 248

【转】ASP.NET Core MVC 配置全局路由前缀

本文地址:http://www.cnblogs.com/savorboard/p/dontnet-IApplicationModelConvention.html作者博客:Savorboard 前言 大家好,今天给大家介绍一个 ASP.NET Core MVC 的一个新特性,给全局路由添加统一前缀。严格说其实不算是新特性,不过是Core MVC特有的。 应用背景 不知道大家在做 ...

a422821906的博客 384

如何在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中...

cxu0262的博客 1864
上一篇: ASP.NET Core完善MVC框架
下一篇: LibMan—在Visual Studio中管理前端包
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值