文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-12-03 10:18

关注

本文转载自微信公众号「码农读书」,作者码农读书。转载本文请联系码农读书公众号。

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

创建 Controller

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

  1. public class AuthorController : Controller 
  2.   { 
  3.       [HttpGet] 
  4.       public ActionResult Index() 
  5.       { 
  6.           return View(); 
  7.       } 
  8.   } 

未知 Action 的问题

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

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

  1. /Author/Books 
  2.  
  3. /Author/Articles 

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

  1. /Author/Index 

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

  1. /Author/Books 
  2. /Author/Articles 

使用 routing 处理未知 Action

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

  1. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) 
  2.        { 
  3.            app.UseStaticFiles(); 
  4.  
  5.            app.UseRouting(); 
  6.  
  7.            app.UseAuthorization(); 
  8.  
  9.            app.UseEndpoints(endpoints => 
  10.            { 
  11.                endpoints.MapControllerRoute( 
  12.                         name"viewName"
  13.                         pattern: "{controller}/{*viewName}"
  14.                         defaults: new { action = "DisplayAnyView" }); 
  15.            }); 
  16.        } 

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

  1. public IActionResult DisplayAnyView(string viewName) 
  2.    return View(viewName); 

完整的 AuthorController 代码如下:

  1. public class AuthorController : Controller 
  2.    { 
  3.        [HttpGet] 
  4.        public ActionResult Index() 
  5.        { 
  6.            return View(); 
  7.        } 
  8.        public IActionResult DisplayAnyView(string viewName) 
  9.        { 
  10.            return View(viewName); 
  11.        } 
  12.    } 

接下来把程序跑起来后,输入: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

 

来源:码农读书内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯