如何在 ASP.NET Core MVC 5 中处理未知的 Action

ASP.NET Core MVC 5 是一个轻量级,开源的,利于单元测试的基于 ASP.NET Core 运行时的 web 框架,在开发时你肯定会遇到不少那些 request 无法匹配 Action 的情况,通常做法是抛出 404,但有些场景下我希望能收口到统一一个 Action 去执行,这篇文章我们将会讨论如何去处理那些未知 Action 的收口。

创建 Controller

现在我们创建一个 AuthorController 类,如下代码所示:

public class AuthorController : Controller{[HttpGet]public ActionResult Index(){return View();}}

未知 Action 的问题

先抛出问题,然后再来看一下怎么解决,假设现在在做一个 图书搜索系统,你希望用户可以根据 作者名书名,文章标题 等条件去查询图书信息,首先你需要知道目录所包含的所有作者,书籍,文章的详细信息,那么这个需求怎么实现呢?

为了实现需求,我肯定会先在 Views 文件夹下新增对应的 view 文件,比如 Authors.cshtml, Books.cshtml, Articles.cshtml,方便用户查询时导向各自的 view ,比如下面的请求。


/Author/Books 
/Author/Articles

显而易见下面的 url 它可以非常利索的导向 AuthorController 下的 Index 方法。


/Author/Index

回过头来,如果你在浏览器中输入如下两个url,这时候肯定会抛异常,很显然 AuthorControler 下并没有所谓的 Books 和 Articles 这两个 Action 方法。


/Author/Books
/Author/Articles

使用 routing 处理未知 Action

那如何对这些未知 Action 进行收口呢?可以使用 Routing 机制来解决此类问题,如下代码所示:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env){app.UseStaticFiles();app.UseRouting();app.UseAuthorization();app.UseEndpoints(endpoints =>{endpoints.MapControllerRoute(name: "viewName",pattern: "{controller}/{*viewName}",defaults: new { action = "DisplayAnyView" });});}

上面代码的意思是,使用视图名 (*viewName) 来匹配 Action,如果能找到对应的 Action 则可以进行渲染,如何找不到就默认跳到 DisplayAnyView 这个Action上,下面是 DisplayAnyView 方法的实现。


public IActionResult DisplayAnyView(string viewName)
{return View(viewName);
}

完整的 AuthorController 代码如下:

public class AuthorController : Controller{[HttpGet]public ActionResult Index(){return View();}public IActionResult DisplayAnyView(string viewName){return View(viewName);}}

接下来把程序跑起来后,输入:http://localhost:32172/Author/Books  , 你会观察到 DisplayAnyView 方法中的断点被成功命中,如下图所示:

Action 是 Controller 下的 public & non-static 方法,它可以有效的将 request 请求匹配到对应的 action 上,然而当 request 所匹配的 action 不存在时将会抛出运行时异常,现在你可以避免这种情况了。

译文链接:https://www.infoworld.com/article/3600794/how-to-handle-unknown-actions-in-aspnet-core-mvc-5.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文读懂 HMM 模型和 Viterbi 算法

隐含马尔可夫模型(Hidden Markov Model)隐含马尔可夫模型并不是俄罗斯数学家马尔可夫发明的,而是美国数学家鲍姆提出的,隐含马尔可夫模型的训练方法(鲍姆-韦尔奇算法)也是以他名字命名的。隐含马尔可夫模型…

qtabwidget设置tab高度_VC|富文本编辑框CRichEditCtrl的字体与段落设置

将富文本编辑框设置为2.0,关联一个control变量m_textblock:1 字体设置富文本编辑框关于字体设置的成员函数:BOOL CRichEditCtrl::SetSelectionCharFormat( CHARFORMAT& cf );此成员函数用来设置这个CRichEditCtrl对象中的当前选择的文本的…

css伪类元素加在元素前,CSS伪类:before在元素之前 :after 在元素之后实例讲解

本教程简单的介绍一下关于CSS伪类:before, :after详解,有需要了解的朋友可以参考一下下。:before 伪元素在元素之前添加内容这个伪元素允许创作人员在元素内容的最前面插入生成内容。默认地,这个伪元素是行内元素,不过可以使用属性 display 改…

云计算的关键特点及挑战

本文节选自《云计算:实现、管理与安全》导言 云计算的关键特点 一个云计算环境有几个关键特点。服务经常提供给特定 的看到因他们的资本支出最小化而获益的消费者和小企业。 这有助于降低在市场进入门槛,因为用来提供这些产品的基础设施由云服务提供商拥…

Mock 框架 Moq 的使用

Mock 框架 Moq 的使用IntroMoq 是 .NET 中一个很流行的 Mock 框架,使用 Mock 框架我们可以只针对我们关注的代码进行测试,对于依赖项使用 Mock 对象配置预期的依赖服务的行为。Moq 是基于 Castle 的动态代理来实现的,基于动态代理技术动态生成…

凝思系统改时间_国产操作系统往事:四十年激变,终再起风云

在这一轮技术浪潮中,无论是底层的开发生态,算力的硬件基础,还是五花八门的商业化落地场景,中国企业都有着毋庸置疑的话语输出能力。而另一个全民皆知、中国ICT产业的长期阵痛——国产操作系统,也在2019世界人工智能大会…

程序员必知的 Python 陷阱与缺陷列表

我个人对陷阱的定义是这样的:代码看起来可以工作,但不是以你“想当然“”的方式。如果一段代码直接出错,抛出了异常,我不认为这是陷阱。比如,Python程序员应该都遇到过的“UnboundLocalError”, 示例:>&…

楚乔传手游 服务器维护,楚乔传手游网络异常进不去游戏怎么办?楚乔传网络异常解决方法...

随着楚乔传的大热,手游楚乔传也应运而生,上线后的楚乔传手游版虽然好玩但也出现了许多的BUG和问题,最近有小伙伴说楚乔传手游下载后,打不开一直显示网络异常,但是网都好的,那么楚乔传手游网络异常怎么办?楚…

说说富士康跳楼事件

发生这么多连续悲剧的原因个人认为,除了富士康管理以及员工群体的问题以外,更大的责任还在于媒体的铺天盖地宣传,导致了极强的示范效应。为什么富士康已经存在那么久,之前没有那么多跳楼的,反倒是宣传以后越来越多呢&a…

聊一聊和Nacos 2.0.0对接那些事

前言 nacos 2.0.0 已经发布了 alpha1, alpha2 和 beta 三个版本了,部分测试报告也已经出来了。Nacos2.0.0-ALPHA2 服务发现性能测试报告Nacos 2.0.0-ALPHA2 配置性能测试报告还是比较值得期待的。前段时间也一直在完善 nacos-sdk-csharp 这个项目。主要就是对接 Nac…

网页访问samba服务器,(smbclient) - 交互方式访问samba服务器

smbclient交互方式访问samba服务器补充说明smbclient命令 属于samba套件,它提供一种命令行使用交互式方式访问samba服务器的共享资源。语法smbclient(选项)(参数)选项-B:传送广播数据包时所用的IP地址;-d:指定记录文件所记载事件的…

家用简单电线路图_家庭配电箱接线图解 家用配电箱安装方法

家居装修对水电的关注不可或缺,家庭电路的铺设更是至关重要的环节,其中家庭配电箱安装涉及到家居用电的安全问题。因此,小编特地对家庭配电箱安装的知识,以及家庭配电箱接线图作出相关整理,帮助大家对家庭配电箱有一个…

决策树算法及实现

在计算机科学中,树是一种很重要的数据结构,比如我们最为熟悉的二叉查找树(Binary Search Tree),红黑树(Red-Black Tree)等,通过引入树这种数据结构,我们可以很快地缩小问…

记录一下(session共享的文章,wcf记录一下学习地址,Firebug)

Firebug现在感觉还不错 http://www.cnblogs.com/jzywh/archive/2008/11/02/sharesession.html http://www.cnblogs.com/igtea/archive/2009/02/03/1382825.html http://www.cnblogs.com/artech/archive/2007/09/15/893838.html

ElasticSearch+NLog实现.net core分布式日志管理

概述Elasticsearch可广泛应用于日志分析、全文检索、结构化数据分析等多种场景,大幅度降低维护多套专用系统的成本,在开源社区非常受欢迎。在系统中,如果将日志作为文件输出,查看系统日志将非常不便;如果将日志保存到数…

双路服务器只显示一半内存,双路服务器只显示一半内存

双路服务器只显示一半内存 内容精选换一换北京时间1月3日,Intel处理器芯片被曝出存在严重的Meltdown和Spectre安全漏洞,漏洞详情如下:漏洞名称:Intel处理器存在严重芯片级漏洞漏洞编号:CVE-2017-5753、CVE-2017-5715、…

react 最佳入门_miaov-React 最佳入门

node 环境搭建快速安装国内镜像npm i -g nrmnrm use taobao简单介绍 ES6let constlet 不可以被重复声明,而 var 可以箭头函数等效匿名函数没有 argumentsthis 指向了函数所在的上下文环境函数的返回值let a () > {}; console.log(a); // undefined, 误认为返回的…

javascript常用技巧

1. οncοntextmenu"window.event.returnValuefalse" 将彻底屏蔽鼠标右键 <table border οncοntextmenureturn(false)><td>no</table> 可用于Table 2. <body onselectstart"return false"> 取消选…

不想再被鄙视?那就看进来! 一文搞懂 Python 2 字符编码

程序员都自视清高&#xff0c;觉得自己是创造者&#xff0c;经常鄙视不太懂技术的产品或者QA。可悲的是&#xff0c;程序员之间也相互鄙视&#xff0c;程序员的鄙视链流传甚广&#xff0c;作为一个Python程序员&#xff0c;自然最关心的是下面这幅图啦我们项目组一值使用Python…

mysql的外键_mysql如何查看外键

展开全部查看mysql外键方式主要是通过第三方工具或者62616964757a686964616fe4b893e5b19e31333431373233是sql语句&#xff0c;主要有以下三种方式1、使用Navicateformysql&#xff0c;打开数据库、查看数据库表、查看设计表、选择外键选项卡&#xff0c;就可以查看外键2、使用…