为什么“视图”不能正常工作作为MVC路由前缀?

时间:2014-05-19 17:29:14

标签: c# asp.net-mvc-5 attributerouting

我尝试使用属性路由为客户端(特别是AngularJS)模板创建一个通用操作,这样我就不需要为每个视图添加一堆单独的操作。

这是我最初的尝试:

[RoutePrefix("views")]
public class ViewsController : Controller
{
    [Route("{area}/{viewName=get}")]
    public ActionResult Get(string area, string viewName)
    {
        return View("~/app/views/" + area + "/" + viewName + ".cshtml");
    }
}

我们说我有一个" get.cshtml"查看文件夹app / views / home。

我注意到的是:

  • 如果我尝试点击/views/home/get,它就能正常工作。
  • 如果我尝试点击/views/home,我会得到一个404并且该方法永远不会被执行。
  • 如果我将控制器名称更改为FooController(即认为它可能是约定与属性路由之间的冲突)并尝试点击/views/home,我仍然获取一个404。
  • 如果我删除"标准"的全部路由,只使用基于属性的路由,我仍然得到404.所以它绝对不是一个冲突。
  • 如果我将其更改为[RoutePrefix("view")]并尝试点击/view/home,则 正常工作。

为什么会这样?它是属性路由中的错误吗?它是MVC路由中的某种特殊关键字或保留字吗?它是否与默认的MVC"视图"有关。文件夹,它仍然存在于其web.config等等?

0 个答案:

没有答案