在开发Web网站过程中可能会遇到需要添加许多宣传页,这些宣传页往往不需要什么后端逻辑代码,这时候我们就不希望为每一个宣传页都添加一个Action,
而是希望只添加一个Action,然后结合路由动态的指向不同的视图。而动态的指向不同的视图这时候可能就需要用到判断某个视图是否存在,不存在执行某个逻辑。
下面我们来看下Demo:
首先来看下Demo的项目结构
接下来看下核心代码
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNetCore.Mvc;using Microsoft.AspNetCore.Mvc.ViewEngines;namespace IsExistsViewDemo.Controllers{ /// /// 静态宣传页 /// public class DHtmlController : Controller { #region 字段和属性 /// /// 混合视图引擎 /// private readonly ICompositeViewEngine _compositeViewEngine; #endregion 字段和属性 #region 构造函数 /// /// 构造函数 /// public DHtmlController(ICompositeViewEngine compositeViewEngine) { _compositeViewEngine = compositeViewEngine; } #endregion 构造函数 #region 宣传页 /// /// 宣传页 /// /// /// 视图名称 /// /// /// [Route("dhtml/{viewname}/")] public IActionResult Index(string viewname) { var view = _compositeViewEngine.FindView(ControllerContext, viewname, false)?.View; if (view == null) //判断指定的视图文件是否存在 { // TODO return View("NotFound"); } return View(viewname); } #endregion 宣传页 #region 直通车宣传页 /// /// 直通车宣传页 /// /// /// 视图名称 /// /// /// [Route("dhtml/ztc/{viewname}.html")] public IActionResult ZTC(string viewname) { var view = _compositeViewEngine.FindView(ControllerContext, $"ZTC/{viewname}", false)?.View; if (view == null) //判断指定的视图文件是否存在 { // TODO return View("NotFound"); } return View($"ZTC/{viewname}"); } #endregion 直通车宣传页 }}