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

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

  1. 如何在 Asp.Net Core MVC 中处理 null 值

    译文链接:https://www.infoworld.com/article/3434624/how-to-handle-null-values-in-aspnet-core-mvc.html 传统的 ...

  2. asp 判断数组等于_如何在 ASP.NET Core MVC 中处理 404 错误

    译文链接:https://www.infoworld.com/article/3545304/how-to-handle-404-errors-in-aspnet-core-mvc.html http ...

  3. ssm框架使用重定向报404_如何在 ASP.NET Core MVC 中处理 404 错误

    译文链接:https://www.infoworld.com/article/3545304/how-to-handle-404-errors-in-aspnet-core-mvc.html asp. ...

  4. 在Asp.Net Core MVC 开发过程中遇到的问题总结

    1. Q: Razor视图中怎么添加全局模型验证消息 A:使用ModelOnly <div asp-validation-summary="ModelOnly" class= ...

  5. ASP .NET Core MVC 控制器中获取当前登录用户

    微软提供了 身份验证:Microsoft.AspNet.Identity 如果想要在控制器中获取当前登录的用户,如下代码: var userId = this.User.FindFirstValue( ...

  6. 使用Vue.js和ASP.NET Core MVC实现CQRS模式

    目录 介绍 先决条件 深入了解基本信息 应用解决方案结构 图像上传和显示应用 MVC与JS框架之间的通信设计 在SPA中,在表示层中添加UI和PLL 用于数据读取和写入操作的数据访问层 软件包安装 读 ...

  7. 如何在 ASP.NET Core 中使用 LazyCache

    微软的 ASP.NET Core 已经是一个非常流行的用于构建 高性能, 模块化 并能运行在 Windows, Linux, MacOS 上的 WEB 框架,通常能够让程序保持高性能的一个有效途径就是 ...

  8. 如何在 ASP.NET Core 中实现全局异常拦截

    异常是一种运行时错误,当异常没有得到适当的处理,很可能会导致你的程序意外终止,这篇就来讨论一下如何在 ASP.Net Core MVC 中实现全局异常处理,我会用一些 样例代码 和 截图 来说明这些概 ...

  9. 获取异常信息_如何在 ASP.NET Core 中实现全局异常拦截

    异常是一种运行时错误,当异常没有得到适当的处理,很可能会导致你的程序意外终止,这篇就来讨论一下如何在 ASP.Net Core MVC 中实现全局异常处理,我会用一些 样例代码 和 截图 来说明这些概 ...

最新文章

  1. Linux 将文件夹下的所有文件复制到另一个文件里
  2. Qt学习之路(24): QPainter
  3. vue从入门到精通之进阶篇(一)vue-router基础
  4. python函数知识点总结_python函数map()和partial()的知识点总结
  5. 如何使用Bitwarden在Active Directory上进行密码保护
  6. python自带的和numpy带的all(),any() 来判断各空矩阵和零矩阵 None,以及shape
  7. CentOS安装Hadoop
  8. DialogPlus
  9. Improving Opencv 8: The Core Functionality :File Input and Output using XML and YAML files
  10. IP地址快速切换(转)
  11. Python开发款短链生成器,来满足我的需求!
  12. mariadb镜像使用教程(一)
  13. 夕四今晚加班到2点30,而王二还不打算走《打工人的那些事》
  14. 新书上市第13天,在亚马逊Kindle电子书人工智能榜第三,与《未来简史》和李开复《人工智能》同榜
  15. 当程序员遇到有远见的丈母娘,找对象那不是事
  16. 2021年全球拍立得消耗品(胶片和相纸)收入大约205.8百万美元,预计2028年达到291百万美元
  17. Windows提权基础:信息收集技巧及可用漏洞搜索
  18. 2019年度个人计划
  19. mybatis-plus分页插件配置与使用(springboot)
  20. 计算机信息安全op协议,2019工业信息安全技能大赛个人线上赛第一场(前5道)writeup • 旭达网络技术博客...

热门文章

  1. python字典获取关联值_【Python实战12】使用字典关联数据
  2. exfat分配单元大小选多少_安防监控摄像机视角大小和镜头毫米数的基础知识!...
  3. From 7.8 To 7.14
  4. 有两个地方,用到了javabean对象和属性字符串值之间的转换
  5. 补作业:随机生成二元四则运算
  6. [转]Myeclipse9引入easy_ui时,其中的部分js文件报错
  7. 列举python的5个数据类型_python公开课|新公布的5个python核心数据类型,这些细节你难道还不不知道吗...
  8. 博客暂停通知-------10.1~11.24
  9. 使用sql服务器发送贺卡_创建和发送免费电子贺卡的最佳网站
  10. 显示器选三星还是飞利浦_如何为飞利浦色相灯设置计时器