3

这是快速的情况......

我正在尝试使以下网址正常工作...

http://localhost:57732/Power-Drills/DeWalt

我定义了以下控制器...

namespace MvcApplication1.Controllers
{
    public class ProductController : Controller
    {    
        public ActionResult PowerDrills(string brandName)
        {
           ...
        }

        public ActionResult ProductLine(Int64 id)
        {
           ...
        }

    }
}

在 global.asax 中,我定义了以下路线...

public static void RegisterRoutes(RouteCollection routes)
{

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "PowerDrill",
        url: "Power-Drills/{brandName}",
        defaults: new { controller = "Product", action = "PowerDrills", brandName= "RYOBI" },
        namespaces: new[] { "MvcApplication1.Controllers" }
    );

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );

}

我收到以下错误...“找不到与名为”“产品”的控制器匹配的类型。"

所以它似乎表明它找不到 Product 控制器,但是......这个url 工作得很好(使用默认路由)并且Product 控制器处理......

http://localhost:57732/Product/ProductLine/4

我已经阅读了路由并理解(至少我认为我知道)url 段,它们如何映射到控制器和操作以及 global.asax 中的顺序如何重要;我已经为其他人看到并阅读了有关此问题的几篇以前的帖子,但他们的解决方案没有奏效或不适用于我的情况(很多 Ruby for Rails 帖子)。

这篇文章指出,Controller 类需要继承自“Controller”而不是“ApiController”,正如您所看到的,我的已经这样做了。

所以我不确定发生了什么,并欢迎任何指导!

谢谢你,

-G

4

1 回答 1

1

我认为您最好从中删除名称空间,并可能像这样格式化您的路线:

routes.MapRoute(
        "PowerDrill",
        "Power-Drills/{brandName}",
        new { controller = "Product", action = "PowerDrills", brandName = UrlParameter.Optional }
);

虽然我不太熟悉您如何格式化路由(使用命名空间等),但这是我在 MVC 3 中所做的。

尝试用PowerDrill它替换您的路线。

就像 Robert Harvey所说的那样,Phil Haack 的路线测试仪就是一切都失败了的东西。

于 2012-07-02T15:29:40.180 回答