7

我收到此错误“在路由集合中找不到名为'MemberRoute'的路由。参数名称:名称”。这是我的 Global.asax,

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapRoute(
            "MemberRoute",                       // routeName
            "member/{userId}/{pseudoName}", // url
            new
            {                           // url defaults
                controller = "Member",
                action = "Index",
                userId = 0,
                pseudoName = UrlParameter.Optional
            },
            new
            {                          // url constraints
                userId = @"\d+" // must match url {userId}
            }
        );
    }

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}

成员控制器,

public ActionResult Index(int userId, string pseudoName)
    {
        User user;
        var unitOfWork = new UnitOfWork();
        user = unitOfWork.UserRepository.GetById(userId);

        var expectedName = user.PseudoName.ToSeoUrl();
        var actualName = (pseudoName ?? "").ToLower();

        // permanently redirect to the correct URL
        if (expectedName != actualName)
            return RedirectToActionPermanent("Index", "Member", new { id = user.UserId, pseudoName = expectedName });
        return View(user);
    }

呼叫者,

return RedirectToRoute("MemberRoute", new { userId = user.UserId, pseudoName = user.PseudoName });

为什么找不到路由名称?

4

2 回答 2

8

来发现这是由于 MVC 4 造成的,并且所有自定义路由都位于 RouteConfig.cs 文件中的 App_Start 文件夹中。当我打开 Global.asax.cs 时没有 RegisterRoutes 方法,所以我自己添加了它并添加了我的自定义路由,但它不起作用。找到 RouteConfig 文件,它已经存在,RegisterRoutes 方法已经设置了默认值。在那里添加了我的自定义路线,它按预期工作。

于 2012-06-24T16:02:50.523 回答
0

当我第一次学习 MVC 时,我会尝试测试我的 [HttpGet] 操作,有时会得到这个。当我用谷歌搜索错误消息时,我没有得到任何帮助。

然后才意识到错误消息中缺少的是 POST 路由,而且我还没有在我的控制器中创建 [HttpPost] 操作,只有 [HttpGet] 一个。

我希望这可以帮助别人。

于 2020-08-26T04:03:30.777 回答