在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
原文: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 中间件时,可以在 这种方法通常被称为基于约定的路由。 以下代码是常规路由的代码片段 routeBuilder.MapRoute("Default", "{controller=Home}/{action=Index}/{id?}");
上面的代码中,我们定义了一个路由正则,告诉 MVC 如何查看 URL 并找到控制器名称和操作名称,其中控制器是 前面几章节中,我们已经在应用程序中创建了一个控制器 ( using System;
namespace HelloWorld.Controllers
{
public class HomeController
{
public HomeController()
{
}
public string Index()
{
return "你好,世界! 此消息来自 HomeController...";
}
}
}
这里,我们回到路由上来,我们将重点关注路由到控制器,我们也将尝试理解路由如何工作 现在,我们回到 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseFileServer();
app.UseMvcWithDefaultRoute();
}
路由规则当然了,接下来我们不使用 以下是按照这种思路的 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?}");
}
}
}
在 路由的目标是描述 ASP.NET Core MVC 用于处理 HTTP 请求并找到可响应该请求的控制器的规则
现在,我们重启应用程序,然后刷新浏览器,我们将获得以下输出 我们只看到了从 于是 Mvc 中间件放弃了处理该请求并将请求传递给下一个中间件,也就是 与默认的路由模板不同,我们指定的路由模板非常安静...
默认的路由模板,如果找不到控制器和操作名称,则会使用一些默认值。 如果请求的是网站的根目录,则默认控制器名称将是 private void ConfigureRoute(IRouteBuilder routeBuilder) {
//Home/Index
routeBuilder.MapRoute("Default", "{controller=Home}/{action=Index}/{id?}");
}
如果请求的是网站的根目录,MVC 中间件不会看到 URL 的控制器/操作类型,但它可以使用这些默认值。 现在,我们保存 现在,我们可以看到控制器的响应,我们也可以访问 添加一个控制器 AboutController现在,我们添加另一个控制器并将其命名为 目录结构如下 内容如下 我们添加一些简单的动作,返回字符串,完整代码如下 using System;
namespace HelloWorld.Controllers
{
public class AboutController
{
public AboutController()
{
}
public string Phone()
{
return "+10086";
}
public string Country()
{
return "中国";
}
}
}
在这个控制器中,我们可以看到两种操作方法: 我们可以看到输出了电话号码 可以看到输出了 看到这个页面,是因为 ASP.NET Core MVC 转到 AboutController,但没有找到指定的操作。所以它默认使用 Index,并且这个控制器没有 Index 方法,然后这个请求会进入下一个中间件 |
请发表评论