摆脱仅在ASP.NET MVC中返回视图的控制器GET操作的方法

时间:2014-10-30 08:41:01

标签: asp.net-mvc

项目控制器中的大多数操作只返回相应的视图:

public ActionResult Index()
{
    return View();
}

我想知道有没有办法摆脱这样的GET动作并直接将URL映射到视图? 例如:' / home / index'呈现视图'〜/ Views / Home / Index.cshtml'

Chaim Brykman(@ haim770)建议的解决方案示例代码https://github.com/artplastika/ViewWithoutControllerDemo

1 个答案:

答案 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

(您可以将“静态”更改为“您喜欢的任何内容”)

这是一个非常基本的实现,它不考虑区域(虽然可以轻松调整)。它也不能处理此更改可能带来的所有安全隐患(取决于应用程序的性质)。