文章转载请联系码农阅读公众号。ASP.NETCoreMVC5是一个基于ASP.NETCore运行时的轻量级开源Web框架,有利于单元测试。在开发过程中,肯定会遇到很多请求无法匹配到Action的情况。通常的做法是抛出404,但在某些场景下,希望将其关闭到一个统一的Action中去执行。在本文中,我们将讨论如何处理那些未知的Actions的关闭。创建Controller现在我们创建一个AuthorController类,如下代码所示:如何解决,假设现在要做一个图书搜索系统,想让用户根据作者姓名、书名、文章标题等条件查询图书信息。首先,您需要了解目录中包含的所有作者、书籍和文章的详细信息。如何实现这个需求??为了满足要求,我肯定会先在Views文件夹下添加相应的视图文件,比如Authors.cshtml、Books.cshtml、Articles.cshtml,方便用户在查询的时候直接自己的视图,比如下面要求。/Author/Books/Author/Articles很明显下面的url可以很整洁的引到AuthorController下的Index方法。/Author/Index回过头来看,如果在浏览器中输入下面两个url,这个时候肯定会抛出异常。显然,AuthorControler下没有所谓的Books和ArticlesAction方法。/Author/Books/Author/Articles使用路由来处理未知动作,那么如何关闭这些未知动作呢?可以使用路由机制来解决此类问题,如下代码所示:{endpoints.MapControllerRoute(name:"viewName",pattern:"{controller}/{*viewName}",defaults:new{action="DisplayAnyView"});});}以上代码的意思是,使用视图名称(*viewName)去匹配Action,如果能找到对应的Action,就可以渲染,如果找不到,会默认跳转到DisplayAnyView的Action,下面是DisplayAnyView方法的实现。publicIActionResultDisplayAnyView(stringviewName){returnView(viewName);}完整的AuthorController代码如下:程序起来后,输入:http://localhost:32172/Author/Books,你会观察到DisplayAnyView方法中的断点成功命中,如下图:Controller,它可以有效地将request请求匹配到相应的action。但是,当请求匹配的动作不存在时,会抛出运行时异常。现在你可以避免这种情况。翻译链接:https://www.infoworld.com/article/?0794/how-to-handle-unknown-actions-in-aspnet-core-mvc-5.html
