当前位置: 首页 > article >正文

ASP.NET Core 路由规则,自定义特性路由 ,IActionConstraint 路由约束 总结 mvc

资料

资料

路由服务

路由服务是在 Program.cs 中使用 builder.Services.AddRouting()注册的,
只是默认在 builder 之前已经注册过了,无需我们再次注册。
AddRouting()方法必须在 UseRouting()方法之前运行,它是路由的基础服务。

在这里插入图片描述

MapControllerRoute 用于常规路由

在这里插入图片描述

MapDefautControllerRoute 用于常规路由 这是上面的内容,但它简写了我上面显示的默认模式的配置。

MapControllers 属性路由 【特性路由】 最常用于 restfull api 或者webapi,

在这里插入图片描述

UseMvc 不能跟终结点路由一起使用 支持多路由 支持特性路由

//不启用终结点
builder.services.AddMvc(options => options.EnableEndpointRouting = false);

在这里插入图片描述

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

UseMvcWithDedaultRoute 是app.UseMvc 的默认值 简写

使用名为“default”的默认路由和以下模板将 MVC 添加到 IApplicationBuilder
请求执行管道:“{controller=Home}/{action=Index}/{id?}”。
在这里插入图片描述

UseRouting UseEndpoints 终结点路由 支持多路由

在这里插入图片描述
UseRouting() 方法用于配置请求路由。

UseEndpoints() 方法用于定义请求的服务端点。
在这里插入图片描述
》》》配置终结点委托
MapGet
MapPost
MapPut
MapDelete
MapControllerRoute
MapHealthChecks
其他类似“MapXXX”的方法

总结

路由一共2种 UseEndpoints 和 UseMvc 不能同时使用
资料

自定义特性路由

在这里插入图片描述

比如HttpGet 继承 HttpMethodAttribute
在这里插入图片描述

public class MyApiControllerAttribute:Attribute,IRouteTemplateProvider
{
	public string Template => "api/[controller]";
	public int?Order {get;set}
	public string Name {get;set;}
}
IActionConstraint 路由约束

在这里插入图片描述

实现IActionConstraint最简单的方法是创建派生自 System.Attribute 的类,并将其置于操作和控制器上。
 MVC 将自动发现任何应用属性IActionConstraint的操作和控制器

//定义ActionConstraint属性约束
public class CountrySpecificAttribute : Attribute, IActionConstraint
    {
        private readonly string _countryCode;
 
        public CountrySpecificAttribute(string countryCode)
        {
            _countryCode = countryCode;
        }
        //  越小 优先级越高
        public int Order
        {
            get
            {
                return 0;
            }
        }
 
        public bool Accept(ActionConstraintContext context)
        {
            return string.Equals(
                context.RouteContext.RouteData.Values["languagecode"].ToString(),
                _countryCode,
                StringComparison.OrdinalIgnoreCase);
        }
    }
      //应用路由的action约束,并且路由中id值为en-US
       [CountrySpecific("en-US")]
        public IActionResult Privacy(string countryCode)
        {
            return View();
        }
//在浏览器测试时:如果输入http://localhost:30081/home/Privacy/zh-cn,则网页显示404。
//如果输入http://localhost:30081/home/Privacy/en-US 则符合约束,网页显示正常。
//路由是  
app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{languagecode}");        
});

微软资料


http://www.kler.cn/a/388823.html

相关文章:

  • 论文阅读《BEVFormer v2》
  • 3D绘制动态爱心Matlab
  • 如何用WordPress和Shopify提升SEO表现?
  • rockylinux 8安装 gcc11.2
  • 设计模式-七个基本原则之一-迪米特法则 + 案例
  • SQL练习(2)
  • Swift 开发教程系列 - 第12章:协议与协议扩展
  • 利用RANSAC算法拟合平面并生成包围框的点云处理方法,点云聚类、质心坐标、倾斜角度、点云最小外接矩形
  • 【JAVA】正则表达式的贪婪模式与非贪婪模式
  • 详解MySQL安装
  • 使用原生Redis完成分布式锁
  • Rust安全性与最佳实践————安全编程技巧
  • 网络安全---安全见闻
  • 安卓/华为手机恢复出厂设置后如何恢复照片
  • 树莓派AI视觉小车--5.机器人小车超声波避障
  • Typora导出pdf手动分页和设置字体样式
  • 图像信号处理器(ISP,Image Signal Processor)详解
  • 如何让其他人连接到我们的数据库、进行项目前后端分离
  • Elasticsearch+kibana+filebeat的安装及使用
  • 刘卫国MATLAB程序设计与应用课后答案PDF第三版
  • SQL--查询连续三天登录数据详解
  • Windows命令行常用快捷指令
  • react 组件应用
  • 电子电气架构 --- 基于以太网的车载网络协议的描述
  • PHP字符串变量
  • 【ARM】MDK-E203 Undefined identifier