动态路由
在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自动化技术研究”公众号,这里不定期分享源码等内容。