仅当物理资源不存在时才会路由到通用Razor页面

时间:2017-12-14 05:19:25

标签: c# asp.net-mvc asp.net-mvc-4 razor

我是一名前端开发者,对C#一无所知。我一直在涉及Razor的观点,所以我可以解决这个问题。我正在开发一个可能需要一些C#路由的项目,而我无法使其工作(我认为这是由于我的理解有限)

我们构建了一个包含静态资源(物理.cshtml页面)以及存储在数据库中的内容的网站。这些内容片段的所有链接都是通过把手模板生成的,所以我不能在我的模板中使用Razor(我知道)。数据库内容需要使用 page.cshtml ,然后还应将其路由到从网址中删除

因此,实质上,当您点击http://www.example.com/my-page时,应检查 my-page.cshtml 是否存在,否则请将http://www.example.com/page/my-page重写为http://www.example.com/my-page

我试图使用它,但它不起作用:

using System.Web.Routing;

public class Routes
{
   void RegisterRoutes(RouteCollection routes)
   {
    routes.MapPageRoute("Deals",
        "/{page}", "~/page.cshtml");
   }
}

这只能使用剃刀吗?我尝试通过 C#RouteConfig 进行路由,但该项目使用的是.NET的V4,因此属性路由不起作用。我也不能使用catchall路由,因为目录中有一些页面。

或者我唯一的选择是在数据库中明确说明/page/的链接并重写IIS吗?

我的另一个选择是始终点击 page.cshtml ,如果找不到我的数据库中的内容,则会加载 my-page.cshtml 作为部分。但是如果有人在地址栏中输入http://www.example.com/my-page会怎么样?

1 个答案:

答案 0 :(得分:0)

您可以检查控制器中是否存在my-page.cshtml文件

 string myFile = Server.MapPath("path to my-page.cshtml");

 if(File.Exists(myFile))
 {   
    return View("path to my-page.cshtml"); 
 }

else
{
   //from db
}

ps:您需要在控制器中使用System.IO