如何为.NET Core 3.1 MVC项目添加额外cshtml页面并绑定访问URL
.NET Core 3.1 MVC 自定义页面配置问题解答
问题1:cshtml文件存放位置
cshtml是Razor视图文件,属于服务端动态渲染资源,必须存放在Views目录下,不能放在wwwroot目录,原因如下:
wwwroot是.NET Core默认的静态资源目录,仅用于存放不需要服务端编译处理的静态文件(css、js、静态html、图片等),放在该目录下的cshtml不会被Razor引擎编译,直接访问会返回源代码,既达不到渲染效果也存在代码泄露风险- 常规存放规则:
- 如果你为该页面单独创建了控制器(比如
CustomController),就存放在Views/Custom/目录下,视图文件名和控制器下返回该视图的Action名保持一致即可 - 如果是多个控制器共用的页面,可存放在
Views/Shared/目录下
- 如果你为该页面单独创建了控制器(比如
问题2:页面与访问URL关联配置
正确配置方式
.NET Core MVC的路由规则统一在服务端配置,不能在Index.cshtml或_ViewStart.cshtml中完成路由绑定,这两个都是视图渲染文件,不负责路由规则注册,正确配置步骤如下:
- 先创建对应控制器和Action方法,示例代码:
public class CustomPageController : Controller { // 该Action返回你的自定义cshtml视图 public IActionResult MyPage() { // 如果你的cshtml存放在Views/Shared目录下,直接写视图文件名即可 // 如果存放在对应控制器目录,且文件名和Action名一致,可以直接return View() return View("MyPage"); } }
- 绑定自定义URL,有两种可选方式:
- 方式1:特性路由,直接在Action上添加路由标记,适合单独为单个页面配置自定义路径:
[Route("target-page-path")] // 这里写你要绑定的站点内路径,访问你的域名+/target-page-path即可打开页面 public IActionResult MyPage() { return View("MyPage"); }
- 方式2:全局路由配置,在
Startup.cs的Configure方法的UseEndpoints配置块中添加自定义路由规则:
app.UseEndpoints(endpoints => { // 自定义路由规则写在默认路由前面 endpoints.MapControllerRoute( name: "customPage", pattern: "target-page-path", defaults: new { controller = "CustomPage", action = "MyPage" }); // 原有默认MVC路由保留即可 endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); });
- 按钮跳转配置:在你需要添加跳转按钮的页面(比如Index.cshtml)中,直接给按钮绑定跳转路径即可:
<a href="/target-page-path" class="btn">点击跳转</a>
注意:如果你需要绑定的是独立域名(非站点内路径),需要在Web服务器(IIS、Nginx等)层面做域名绑定和转发规则配置,不属于MVC项目内部配置范围。
内容的提问来源于stack exchange,提问作者user14943311
相关产品推荐
相关产品推荐

