MVC路由返回404

时间:2015-04-08 16:02:34

标签: asp.net-mvc model-view-controller routing routes

我遇到了问题

我正在尝试建立以下路线:

routes.MapRoute(
                name: "PublicForms",
                url: "Public/Form/{*parameters}",
                defaults: new { controller = "Form", action = "Index", parameters = UrlParameter.Optional}
               );

但只有当我传递多个参数

时它才有效

示例:

http://localhost:12982/Public/Form/aaa/bbb投放

public ActionResult Index(string parameters)
{
    // parameter comes aaa/bbb
}

http://localhost:12982/Public/Form/aaa不起作用。

它返回404

不应该吗?

public ActionResult Index(string parameters)
{
    // parameter comes aaa
}

的Th

3 个答案:

答案 0 :(得分:0)

如果您尝试http://localhost:12982/Public/Form/Index/aaa怎么办? 在你的情况下,你正在呼叫一个名为" aaa"在FormController中,它不存在。

答案 1 :(得分:0)

以下代码经过测试: http://localhost:50956/Public/Form/foo 所以它可能会做一些我认为你正在寻找的东西。希望它有所帮助。

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute("formPublic",
                   "Public/{*.}",
                    new { controller = "Home", action = "Index" }

                    );


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

答案 2 :(得分:0)

我发现了一种不是我想要的方式,但却有效。

我不能隐含动作,所以我必须指定控制器和动作,并将一个额外的参数作为第一个参数,当它只有一个时。

现在如果我只用一个参数调用服务,它就不会返回404

routes.MapRoute(
                name: "OpenForm",
                url: "public/{controller}/{action}/{arg}/{*parameters}",
                defaults: new { categorySlug = UrlParameter.Optional ,subCategorySlug = UrlParameter.Optional }
            );