ASP.NET Core 属性路由 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 属性路由 - ASP.NET Core 基础教程 - 简单教程,简单编程
ASP.NET Core 属性路由
经过前面章节的学习,想必你已经对 ASP.NET Core MVC 中的路由有了大概的了解,本来我想多花几章节来讲解路由规则,但是,作为基础教程,我们还是讲解下一个知识点吧。
在本章中,我们将学习另一种路由方法,即基于属性的路由。
属性路由
通过基于属性的路由,我们可以在控制器类和这些类的内部方法上使用 C# 属性。 这些属性携带了告诉 ASP.NET Core 何时调用特定控制器的元数据
- 属性路由是基于约定的路由的替代方案
- 路由按照它们出现的顺序进行评估,也就是我们注册它们的顺序,映射多个路由的情况相当普遍,特别是如果我们想在 URL 中使用不同的参数或者如果要在 URL 中使用不同的文字
我们举一个简单的例子。
打开并运行 HelloWorld 项目,然后在浏览器中访问应用程序。当我们访问 / about 时,它会产生下面的输出

我们想要的是,当我们访问 /about 时,应用程序应该调用 AboutController 的 Phone 方法
针对这种情况,我们可以使用 Microsoft.AspNetCore.Mvc 命名空间下的 Route 属性为该控制器强制执行一些显式路由
下面的代码是添加了属性路由的 AboutController 的实现
using System;
using Microsoft.AspNetCore.Mvc;
namespace HelloWorld.Controllers
{
[Route("about")]
public class AboutController
{
public AboutController()
{
} [Route("")]
public string Phone()
{
return "+10086";
} [Route("country")]
public string Country()
{
return "中国";
}
}
}
在这里,我们给 Phone() 方法添加了一个空的路由属性,这意味用户只需要访问 /about,而不需要指定操作就可以访问此方法。对于 country 方法,我们在路由属性中指定了 country
保存下 AboutController.cs ,刷新浏览器并访问 /about,我们可以看到正常输出了电话号码

如果我们访问 /about/country ,那么这将访问 AboutController 控制器中的 Country() 方法

如果希望 URL 的一段包含我们的控制器的名称,那么我们可以不直接显示指定控制器的名称,取而代之的是在方括号内使用令牌控制器,这用于告诉 ASP.NET MVC 在此位置使用此控制器的名称
如以下程序中所示
using System;
using Microsoft.AspNetCore.Mvc; namespace HelloWorld.Controllers
{
[Route("[controller]")]
public class AboutController
{
public AboutController()
{
} [Route("")]
public string Phone()
{
return "+10086";
} [Route("[action]")]
public string Country()
{
return "中国";
}
}
}
使用这种方式,即使我们重命名路由器,也不必去更改路由。 对于一个动作也是一样,并且隐式地在控制器和动作之间有一个斜杠 ( / ) 。 它是控制器和动作之间的层次关系,就像它在 URL 中一样
我们再次保存这个 AboutController.cs 文件,重新运行应用程序,我们会看到相同的结果

如果我们访问 /about/country ,那么这将访问 AboutController 控制器中的 Country() 方法

ASP.NET Core 属性路由 - ASP.NET Core 基础教程 - 简单教程,简单编程的更多相关文章
- ASP.NET Core的路由[5]:内联路由约束的检验
当某个请求能够被成功路由的前提是它满足某个Route对象设置的路由规则,具体来说,当前请求的URL不仅需要满足路由模板体现的路径模式,请求还需要满足Route对象的所有约束.路由系统采用IRouteC ...
- ASP.NET Core的路由[4]:来认识一下实现路由的RouterMiddleware中间件
虽然ASP.NET Core应用的路由是通过RouterMiddleware这个中间件来完成的,但是具体的路由解析功能都落在指定的Router对象上,不过我们依然有必要以代码实现的角度来介绍一下这个中 ...
- ASP.NET Core的路由[3]:Router的创建者——RouteBuilder
在<注册URL模式与HttpHandler的映射关系>演示的实例中,我们总是利用一个RouteBuilder对象来为RouterMiddleware中间件创建所需的Router对象,接下来 ...
- ASP.NET Core的路由[2]:路由系统的核心对象——Router
ASP.NET Core应用中的路由机制实现在RouterMiddleware中间件中,它的目的在于通过路由解析为请求找到一个匹配的处理器,同时将请求携带的数据以路由参数的形式解析出来供后续请求处理流 ...
- ASP.NET Core 路由 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 路由 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 路由 前两章节中,我们提到 ASP.NET Core 支持 MVC 开发 ...
- ASP.NET Core的路由[1]:注册URL模式与HttpHandler的映射关系
ASP.NET Core的路由是通过一个类型为RouterMiddleware的中间件来实现的.如果我们将最终处理HTTP请求的组件称为HttpHandler,那么RouterMiddleware中间 ...
- ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门
一.前言 1.本文主要内容 ASP.NET Core MVC路由工作原理概述 ASP.NET Core MVC带路径参数的路由示例 ASP.NET Core MVC固定前/后缀的路由示例 ASP.NE ...
- 如何在ASP.NET Core中构造UrlHelper,及ASP.NET Core MVC路由讲解
参考文章: Unable to utilize UrlHelper 除了上面参考文章中介绍的方法,其实在ASP.NET Core MVC的Filter拦截器中要使用UrlHelper非常简单.如下代码 ...
- ASP.NET Core 入门笔记4,ASP.NET Core MVC路由入门
敲了一部分,懒得全部敲完,直接复制大佬的博客了,如有侵权,请通知我尽快删除修改 摘抄自https://www.cnblogs.com/ken-io/p/aspnet-core-tutorial-mvc ...
随机推荐
- 【BZOJ 1096】[ZJOI2007]仓库建设
[链接] 链接 [题意] 在这里输入题意 [题解] 设f[i]表示在第i个地方设立一个仓库,且前面符合要求的最小花费. 则 \(f[i] = min(f[j] + c[i] + dis[i]*(sum ...
- 【SPOJ QTREE】树链剖分模板
用线段树求解,这里注意因为求的是路径最大值,注意一下细节. #include<cstdio> #include<cstring> #include<algorithm&g ...
- hprof教程 分类: B1_JAVA 2015-03-02 12:18 444人阅读 评论(0) 收藏
大部分内容参考http://www.linuxidc.com/Linux/2012-04/58178.htm J2SE中提供了一个简单的命令行工具来对java程序的cpu和heap进行 profili ...
- JavaScript、Ajax与jQuery的关系 分类: C1_HTML/JS/JQUERY 2014-07-31 10:15 3388人阅读 评论(0) 收藏
简单总结: 1.JS是一门前端语言. 2.Ajax是一门技术,它提供了异步更新的机制,使用客户端与服务器间交换数据而非整个页面文档,实现页面的局部更新. 3.jQuery是一个框架,它对JS进行了封装 ...
- Android多线程研究(3)——线程同步和互斥及死锁
为什么会有线程同步的概念呢?为什么要同步?什么是线程同步?先看一段代码: package com.maso.test; public class ThreadTest2 implements Runn ...
- [RxJS] Split an RxJS observable with window
Mapping the values of an observable to many inner observables is not the only way to create a higher ...
- POJ2112 Optimal Milking 【最大流+二分】
Optimal Milking Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 12482 Accepted: 4508 ...
- 无法为数据库中的对象分配空间,因为'PRIMARY'文件组已满
用SQL Server2012,做数据保存时出错,错误信息:无法为数据库'***'中的对象'***'分配空间,因为'PRIMARY'文件组已满.请删除不需要的文件.删除文件组中的对象.将其他文件添加到 ...
- 【codeforces 546C】Soldier and Cards
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- scala 加载与保存xml文档
package scala_enhance.xml import scala.xml.XML import scala.io.Source import jdk.internal.org.xml.sa ...