项目控制器中的大多数操作只返回相应的视图:
public ActionResult Index()
{
return View();
}
我想知道有没有办法摆脱这样的GET动作并直接将URL映射到视图? 例如:' / home / index'呈现视图'〜/ Views / Home / Index.cshtml'
Chaim Brykman(@ haim770)建议的解决方案示例代码:https://github.com/artplastika/ViewWithoutControllerDemo
答案 0 :(得分:1)
在某些控制器中创建ViewRenderer
操作:
public ViewResult ViewRenderer(string viewPath)
{
var extractedPath = viewPath.Split('/');
this.ControllerContext.RouteData.Values["controller"] = extractedPath[0];
this.ControllerContext.RouteData.Values["action"] = extractedPath[1];
return View();
}
然后,在RoutesConfig
中,在默认(最后)路由之前添加以下路由,相应地更改Controller名称:
// Views Renderer
routes.MapRoute(
name: "ViewsRenderer",
url: "Static/{*viewPath}",
defaults: new { controller = "Common", action = "ViewRenderer" }
);
网址为:
http://your_host_name/Static/Home/Index
(您可以将“静态”更改为“您喜欢的任何内容”)
这是一个非常基本的实现,它不考虑区域(虽然可以轻松调整)。它也不能处理此更改可能带来的所有安全隐患(取决于应用程序的性质)。