我是一名前端开发者,对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
会怎么样?
答案 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