【Web.路由】——动态路由和回退路由

动态路由

在Asp .NET CORE中,启动时就会将应用程序中的所有控制器+操作事先转换为终结点,然后再根据当前的Http请求进行匹配,配对成功就会执行终结点中的委托。

那么如果不想这么做,而是要自己决定哪些控制器和操作会被使用,就需要用到动态路由。

使用动态路由的时候,需要创建一个类文件,该类文件需要继承DynamicRouteValueTransformer 

然后继承过后就是去实现这个类中的TransformAsync方法

public override ValueTask<RouteValueDictionary> TransformAsync(HttpContext httpContext,
RouteValueDictionary values)
{
throw new NotImplementedException();
}

可以重写这个抽象方法,主要是进行路由的更改

//通过 values 得到原始路由数据
values.Add("controller", "Home");//替换控制器
values.Add("action", "Index");//替换操作
return new ValueTask<RouteValueDictionary>(values)

以上代码的解释是

(1). 使用 Home 替换掉原来的控制器名称。
(2). 使用 Index 替换掉原来的操作方法。
(3). 返回一个 ValueTask< T>对象。

之后开发完之后,需要在Program中注册动态路由,方法如下

//注册动态路由
builder.Services.AddSingleton<你的动态路由类>()

注册完之后,在program中一样要使用 ,使用方法是

//应用动态路由
app.MapDynamicControllerRoute<你的路由类>("xxx/xxxx/{id}");

那么以上就是动态路由的简单配置和使用。那么当我们访问界面的时候,有时候如果返回一个404 错误,我们会很讨厌,有没有方法做一个替代,就是我们404的时候,返回的是一个用户友好届满呢?

是可以的,需要用到回退路由。

回退路由

含义:针对404错误或者其他不友好的错误,一律转到一个友好界面,告诉用户当前情况,不会造成体验太差。

回退路由,需要在 Program.cs 中配置,使用MapFallbackToController()方法来解决。
当没有匹配到任何终结点时直接执行某个默认的终结点,在Program.cs 中配置如下:

//配置回退路由
app.MapFallbackToController("{controller}/{action}/{id?}", "Friend", "Fallback");

需要注意,这个是放在最后面的,在app.Run前面

有了以上配置之后,iushiq创建一个控制器,

public class FallbackController : Controller
{
public IActionResult Friend()
{
return View();
}
}

然后在 Views/Fallback 文件夹添加Friend.cshtml 视图,

@{
ViewData["Title"] = "回退路由";
}
<div>
<p>
哦,出错了,正在维护中
</p>
</div>

这样当用户访问的时候,就会跳出

需要注意,这里匹配的是

{controller}/{action}/{id?},所有url需要满足这个路径的形式才会跳出这个页面哦。

同时欢迎关注“上位机PLC自动化技术研究”公众号,这里不定期分享源码等内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matrix Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值