【问题标题】:Why are ASP.Net MVC2 area controller actions callable without including the area in the url path?为什么 ASP.Net MVC2 区域控制器操作可以在不包括 url 路径中的区域的情况下调用?
【发布时间】:2011-02-09 10:20:15
【问题描述】:

我刚刚安装了 Visual Studio 2010 并创建了一个新的 MVC2 项目,这样我就可以了解更改和更新,并发现了一些我不知道该怎么做的问题。

  1. 我创建了一个新的 EMPTY MVC2 项目
  2. 我右键单击该项目,然后从上下文菜单中添加了一个名为“测试”的新区域
  3. 在新的测试区域中,我添加了一个名为“Data”的控制器。

代码是:

public class DataController : Controller
{
    //
    // GET: /Test/Data/

    public ActionResult Index()
    {
        Response.Write("Hi");
        return new EmptyResult();
    }
}

现在,我编译并调用这个地址: http://localhost/mytest/test/data 并获取输出:

Hi

一切都好。现在我称之为:http://localhost/mytest/data 并得到相同的响应!我认为路由应该解决这个问题?我忽略了什么吗?还是 MVC2 的默认项目设置忽略了什么?

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-2 routing


    【解决方案1】:

    这是故意的。 Global.asax 中的默认路由不将其搜索限制在特定区域或命名空间集。 MapRoute 的重载(请参阅one example on MSDN)采用 namespaces 参数,可用于消除此请求所指的控制器的歧义。但即便如此,namespaces 参数只是提示首先搜索哪些命名空间;这不是限制。

    简而言之,在 MVC 中,您必须准备好让您的任何控制器被任何路线击中。这就是为什么所有 MVC 文档都声明安全和其他逻辑应该在控制器级别完成,而不是在路由级别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-06
      • 1970-01-01
      相关资源
      最近更新 更多