ASP.NET Core – MVC vs Razor Page

前言

早年只有 MVC, Razor Page 是后来才出现的.

一开始其实我很看不起 Razor Page, MVC 能做的东西为什么要搞多一个 Razor Page 来做呢? 

但我还是尝试用了起来, 这篇就聊一下 2 者的使用体验.

 

相似之处

2 者都有 .cshtml 来写 html 

2 者都有 .cs 来写 c# (当然你要在 .cshtml 写也不是不可以)

 

区别

我个人感觉最大的区别就是在 route 的匹配上.

MVC 的流程是, URL -> Controller (.cs) -> View (.cshtml)

URL 寻找 Controller 有一个 mapping 的概念 (通常在 startup 配置)

Controller 寻找 View 又有一个 mapping (default 是 2 个 folders, 一个是 Controllers, 一个是 VIews, 这个匹配方式是可以换的)

Razor 的流程是 URL -> .cshtml -> Model (.cs)

URL 寻找 .cshtml (default 是依据 folder 结构, 这个是可以换的)

找到 .cshtml 之后再链接到 Model (.cs)

 

使用体验

如果是做网站的话,我会比较喜欢用 folder 的结构, 所以 razor page 更加合适.

就有点回到以前写 .html 的那种感觉. 很直观简单. 

我目前只有一种情况是需要用到 MVC 的. 就是做 404 页面的时候

因为我有做 amp page, 但是 UseStatusCodePageWithReExceute 只能静态的写一个路径

app.UseStatusCodePagesWithReExecute("/NotFound");

用 Razor Page 的话, 这个 path 会直接找到 .cshtml, 那就完了. 

因为 amp/whatever 必须返回 amp/NotFound 内容

而 /whatever 则是去到 /NotFound

这个时候最好的解决方法就是用 MVC, 通过 Controller 就可以选择要返回 amp view 还是 normal view 了.

 

最后, 其实 MVC 和 Razor Page 并不会冲突, 是可以一起用的哦.

 

posted @ 2021-10-22 21:04  兴杰  阅读(1005)  评论(0编辑  收藏  举报