教做年糕博客网站,wordpress 客户,高端网站建设上海,计算机网络网站建设的实训总结6ASP.NET Core MVC 5 是一个轻量级#xff0c;开源的#xff0c;利于单元测试的基于 ASP.NET Core 运行时的 web 框架#xff0c;在开发时你肯定会遇到不少那些 request 无法匹配 Action 的情况#xff0c;通常做法是抛出 404#xff0c;但有些场景下我希望能收口到统一一个… 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