【问题标题】:Add route after Application_Start在 Application_Start 之后添加路由
【发布时间】:2011-09-24 19:08:31
【问题描述】:

我正在开发一个用户要向该站点添加页面的站点,并且我试图使用路由在创建后立即使该页面可用。

例如,用户可能会创建一个 About 页面,现在我在添加页面时将一些逻辑放在控制器中。

if (ModelState.IsValid)
        {
            context.Pages.Add(page);
            context.SaveChanges();
            RouteTable.Routes.MapRoute(page.Name, page.Url,
                            new { controller = "Home", action = "Index", id = UrlParameter.Optional });

            return RedirectToAction("Index");  
        }

但是当我使用 About 作为 url 创建 About 页面然后尝试转到 /About 时,我收到 404 错误。

是否可以在 Application_Start 之外添加路由?

【问题讨论】:

  • 你想做什么?你能提供全图吗?您不应该尝试在控制器操作中添加任何路由。有更好的方法来实现您想要实现的任何目标。
  • 我正在尝试这样做,因此当有人添加带有 /About 之类的 url 的新页面时,他们可以立即浏览到 /About,它将使用 Home/Index 作为请求的默认路由.

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


【解决方案1】:

您应该避免在控制器操作中定义任何路由。对于您的场景,您可以定义以下路线:

routes.MapRoute(
    "Default",
    "{id}",
    new { controller = "Home", action = "Index" }
);

现在/About 形式的请求将被路由到Home 控制器的Index 操作,并将id=About 作为参数传递:

public ActionResult Index(string id)
{
    // if the request was /About, id will equal to About here
    ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多