MVC 路由 returns 404 与

MVC routing returns 404 with

我有问题

我正在尝试设置以下路线:

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 不起作用。

它returns一个404

不应该吗?

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

如果你尝试 http://localhost:12982/Public/Form/Index/aaa 会怎样 在您的情况下,您在 FormController 中调用了一个名为 "aaa" 的 Action,它不存在。

以下代码经过测试: 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 }
        );

我找到了一种方法,虽然不是我想要的但很有效。

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

现在,如果我只使用一个参数调用该服务,它不会 return 404

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