ASP.NET Core 路由 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 路由 - ASP.NET Core 基础教程 - 简单教程,简单编程
ASP.NET Core 路由
前两章节中,我们提到 ASP.NET Core 支持 MVC 开发模式,同时也给大家详细解释了 MVC 设计模式和 ASP.NET Core 中的 MVC 设计模式
MVC 框架中,我们有三个组件,每个组件都专注于特定部分的工作。 为了使所有这些工作,我们需要找到一种方法将这些 HTTP 请求发送到正确的控制器。 在 ASP.NET Core MVC 中,这个过程称为路由。 路由是指导 HTTP 请求到控制器的过程
路由
现在,我们来了解如何将请求路由到不同的控制器
首先,ASP.NET Core 中间件需要一个方法来确定给定的 HTTP 请求是否应该发送给控制器进行处理,我们将这个过程称之为路由匹配
MVC 中间件将根据我们提供的 URL 和一些配置信息做出此决定
本章中,我们将定义这些配置信息,或者当我们添加 MVC 中间件时,可以在 Startup.cs 中说明路由信息
这种方法通常被称为基于约定的路由。
以下代码是常规路由的代码片段
routeBuilder.MapRoute("Default", "{controller=Home}/{action=Index}/{id?}");
上面的代码中,我们定义了一个路由正则,告诉 MVC 如何查看 URL 并找到控制器名称和操作名称,其中控制器是 C# 类,操作是该类上的公共方法
前面几章节中,我们已经在应用程序中创建了一个控制器 ( HomeController ) ,它是一个 C# 类,不需要从基类派生或实现接口或具有任何特殊属性。 它是一个纯 C#类,名称为 HomeController,它包含返回字符串的 Index() 方法
using System;
namespace HelloWorld.Controllers
{
public class HomeController
{
public HomeController()
{
} public string Index()
{
return "你好,世界! 此消息来自 HomeController...";
}
}
}
这里,我们回到路由上来,我们将重点关注路由到控制器,我们也将尝试理解路由如何工作
现在,我们回到 Startup 类,将 MVC 中间件配置到我们的应用程序中。然后在 Configure方法中,使用方法 UseMvcWithDefaultRoute()
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} app.UseFileServer();
app.UseMvcWithDefaultRoute();
}
app.UseMvcWithDefaultRoute() 给了我们一个默认的路由规则,允许我们访问 HomeController
路由规则
当然了,接下来我们不使用 app.UseMvcWithDefaultRoute() ,而是使用 UseMvc(),然后在私有方法 ConfigureRoute() 处配置路由
以下是按照这种思路的 Startup.cs 的完整代码
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration; namespace HelloWorld
{
public class Startup
{
public Startup()
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("AppSettings.json");
Configuration = builder.Build();
} public IConfiguration Configuration { get; set; } // This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
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)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} app.UseFileServer();
app.UseMvc(ConfigureRoute); app.Run(async (context) => {
var msg = Configuration["message"];
await context.Response.WriteAsync(msg);
});
} private void ConfigureRoute(IRouteBuilder routeBuilder)
{
//Home/Index
routeBuilder.MapRoute("Default", "{controller}/{action}/{id?}");
}
}
}
在 ConfigureRoute() 方法中,我们可以配置路由,也许你已经注意到了,该方法必须使用 IRouteBuilder 类型的参数
路由的目标是描述 ASP.NET Core MVC 用于处理 HTTP 请求并找到可响应该请求的控制器的规则
- 我们使用一条路由规则将请求映射到不同的控制器
- 我们告诉 routeBuilder 我们想要映射一个新的路由,它的名字是
Default,然后提供最重要的路由信息,路由模板 - 路由模板是一个字符串,它用于向 ASP.NET Core MVC 描述如何拆分 URL
- 在前面的章节中,我们添加了一个
HomeController,因此我们可以请求以下任何 URL,并且它们也将被定向到 HomeController 上的 Index 操作- https://localhost:5001
- https://localhost:5001/Home
- https://localhost:5001/Home/Index
- 当浏览器请求
http://mysite/或http://mysite/ Home时,它将得到 HomeController 的 Index 方法的输出的内容 - 我们可以通过更改浏览器中的 URL 来尝试此操作。在这个例子中,它是
https:// localhost:5001/,可能端口号有所不同 - 如果我们将
/Home或/Home/Index追加到 URL 并按下 Enter 按钮,也会看到相同的结果 - id 末尾的问号表示该参数是可选的。换句话说,ASP.NET Core MVC 在这里不需要看到某种类型的 id,可能是一个数字,也可能是一个字符串或 GUID
现在,我们重启应用程序,然后刷新浏览器,我们将获得以下输出

我们只看到了从 app.Run() 中间件输出的消息,得到此消息的原因是虽然 MVC 中间件看到了该 URL。 但这是对网站根目录的请求,网址中没有找到控制器名称或操作名称。
于是 Mvc 中间件放弃了处理该请求并将请求传递给下一个中间件,也就是 app.Run() 代码。
与默认的路由模板不同,我们指定的路由模板非常安静...
安静这个词,非常好
默认的路由模板,如果找不到控制器和操作名称,则会使用一些默认值。 如果请求的是网站的根目录,则默认控制器名称将是 Home 。 我们可以根据需要将其更改为任何其它控制器,且默认操作名称可以是 Index。 如果需要,也可以更改默认操作,如下面的程序所示
private void ConfigureRoute(IRouteBuilder routeBuilder) {
//Home/Index
routeBuilder.MapRoute("Default", "{controller=Home}/{action=Index}/{id?}");
}
如果请求的是网站的根目录,MVC 中间件不会看到 URL 的控制器/操作类型,但它可以使用这些默认值。
现在,我们保存 Startup.cs 文件并将浏览器定向到到网站的根目录,输出结果如下

现在,我们可以看到控制器的响应,我们也可以访问 / home,它会调用默认的动作,也就是 Index。我们也可以跳转到 /home/index ,MVC 会将控制器名称和操作名称从 URL 中提取出来
添加一个控制器 AboutController
现在,我们添加另一个控制器并将其命名为 AboutController
目录结构如下

内容如下

我们添加一些简单的动作,返回字符串,完整代码如下
using System;
namespace HelloWorld.Controllers
{
public class AboutController
{
public AboutController()
{
} public string Phone()
{
return "+10086";
} public string Country()
{
return "中国";
}
}
}
在这个控制器中,我们可以看到两种操作方法:Phone() 和 Country()。 我们稍后会添加一些花哨的 HTML。 但现在,我们先保存文件,然后访问 /about/phone,显示如下

我们可以看到输出了电话号码 +10086,如果我们访问 /about/country,则显示如下

可以看到输出了 中国,但如果我们访问 /about,那么它将再次通过中间件 app.Run(),我们将看到以下页面

看到这个页面,是因为 ASP.NET Core MVC 转到 AboutController,但没有找到指定的操作。所以它默认使用 Index,并且这个控制器没有 Index 方法,然后这个请求会进入下一个中间件
ASP.NET Core 路由 - ASP.NET Core 基础教程 - 简单教程,简单编程的更多相关文章
- Asp.Net MVC 路由 - Asp.Net 编程 - 张子阳
http://cache.baiducontent.com/c?m=9d78d513d98316fa03acd2294d01d6165909c7256b96c4523f8a9c12d522195646 ...
- ASP.NET Core 属性路由 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 属性路由 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 属性路由 经过前面章节的学习,想必你已经对 ASP.NET Core ...
- ASP.NET Core Razor 编辑表单 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 编辑表单 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 编辑表单 上一章节我们介绍了标签助手和 HT ...
- ASP.NET Core 使用 EF 框架查询数据 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 使用 EF 框架查询数据 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 使用 EF 框架查询数据 上一章节我们学习了如何设置 ...
- ASP.NET Core MVC 设计模式 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core MVC 设计模式 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core MVC 设计模式 上一章节中,我们提到 ASP.NET Co ...
- ASP.NET Core 项目配置 ( Startup ) - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 项目配置 ( Startup ) - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 项目配置 ( Startup ) 前面几章节 ...
- 从头编写asp.net core 2.0 web api 基础框架 (5) + 使用Identity Server 4建立Authorization Server (7) 可运行前后台源码
前台使用angular 5, 后台是asp.net core 2.0 web api + identity server 4. 从头编写asp.net core 2.0 web api 基础框架: 第 ...
- ASP .Net Core路由(Route) - 纸壳CMS的关键
关于纸壳CMS 纸壳CMS是一个开源免费的,可视化设计,在线编辑的内容管理系统.基于ASP .Net Core开发,插件式设计: GitHub:https://github.com/SeriaWei/ ...
- 构建可读性更高的 ASP.NET Core 路由
原文:构建可读性更高的 ASP.NET Core 路由 一.前言 不知你在平时上网时有没有注意到,绝大多数网站的 URL 地址都是小写的英文字母,而我们使用 .NET/.NET Core MVC 开发 ...
随机推荐
- 4、linux开发中常用指令
1.cat /proc/device 可以查看各个全部字符设备和块设备,在register_chrdev中设置的名字在打印出来的信息中可以看到:2.top 可以看各个应用程序占用CPU量及PID等信息 ...
- Bootstrap相关优质项目学习清单
1:编码规范 by @mdo编写灵活.稳定.高质量的 HTML 和 CSS 代码的规范 http://codeguide.bootcss.com/ 2:快速.可靠.安全的依赖管理工具.Yarn 缓存了 ...
- SoC中的IP模块学习
SoC中的IP模块学习 理解IP Spec-->register定义,理解原理+架构框图 查看testcase+model(看已有的测试例程),分析操作/使用模块的流程,寄存器的配置方法 运行仿 ...
- 《转》couldn't connect to server 127.0.0.1:27017 at src/mongo/shell/mongo.js:145
couldn't connect to server 127.0.0.1:27017 at src/mongo/shell/mongo.js:145,有须要的朋友能够參考下. 应为昨天安装的时候没及时 ...
- 用CMake代替makefile进行跨平台交叉编译
在开始介绍如何使用CMake编译跨平台的静态库之前,先讲讲我在没有使用CMake之前所趟过的坑.因为很多开源的程序,比如png,都是自带编译脚本的.我们可以使用下列脚本来进行编译: 1 2 3 ./c ...
- Springmvc+Shiro实战
原文链接:http://blog.csdn.net/qq_37936542/article/details/79010449 springmvc+shiro实现系统粗细粒度的权限管理步骤: 1:表格设 ...
- [Jenkins] Creating Application builds
After installing the jenkins, we start creating new job. 1. Give job names (your project name): 2. G ...
- [Ramda] Declaratively Map Data Transformations to Object Properties Using Ramda evolve
We don't always control the data we need in our applications, and that means we often find ourselves ...
- 【t055】成绩统计
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 华南师大附中月考二已经结束,级长想知道最高分是谁.但是现在级长很忙,没有时间统计成绩,于是他找到了你, ...
- Oracle中的游标(转)
Oracle中的游标有两种:显式游标.隐式游标.显示游标是用cursor...is命令定义的游标,它可以对查询语句(select)返回的多条记录进行处理,而隐式游标是在执行插入 (insert).删除 ...