gpt4 book ai didi

asp.net-mvc-3 - 默认路由不起作用

转载 作者:行者123 更新时间:2023-12-02 01:11:56 25 4
gpt4 key购买 nike

为什么这不起作用?

路线:

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

Controller :

public class SummaryController : Controller
{
public ActionResult Default(int id)
{
Summary summary = GetSummaryById(id);

return View("Summary", summary);
}
}

网址:

http://localhost:40353/Summary/107

错误:

Server Error in '/' Application.

The resource cannot be found.

Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.

Requested URL: /Summary/107

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.225

更新:

让我用一个更聪明的问题来更新这个问题。我怎样才能同时拥有这两个?

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

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

最佳答案

路由如何工作(默认情况下)?

让我们回到默认路由,它有点像这样:

routes.MapRoute(

// Route name
"Default",

// URL with parameters
"{controller}/{action}/{id}",

// Parameter defaults
new { controller = "Home", action = "Index", id = UrlParameter.Optional }

);

让我们尝试了解一下它是如何工作的。

  • 如果您访问/ ,它将调用Index Home的行动 Controller ;可选 ID 被省略。

  • 如果您访问/C它会调用 Index C的行动 Controller ;可选 ID 被省略。

  • 如果您访问/C/A它会调用A C的行动 Controller ;可选 ID 被省略。

  • 如果您访问/C/A/1它会调用A C的行动 Controller ID 1 .

因此,该路由允许任何 / 形式的 URL , /C , /C/A/C/A/1哪里C是一个 Controller 并且 A是一个 Action 。这是什么意思?这意味着您不一定必须指定自己的路线。

所以,如果没有路线,你就可以有 HomeController和一个 SummaryController并向最后一个名为 Show 的 Controller 添加一个操作.

然后/Summary/Show/1会打电话 SummaryController.Show(1)

<小时/>

如果我想为 Controller 设置更短的路线 (/Controller/Id),该怎么办?

假设我们确实想要映射路线 /Summary/1来电 SummaryController.Show(1) .

以下是正确的形式:

routes.MapRoute(
"Summary",
"Summary/{id}",
new { controller = "Summary", action = "Show" }
);

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

请注意,我们已经更改了 Home路线看起来像 Default路线。现在我们添加了 Summary我们告诉路由 Summary/{id} 形式的 URL将触发该路线。当他们这样做时,它会调用 Show Summary的行动 Controller 并传递id作为参数;这正是您想要的...

另请注意,我们需要放置 Summary首先路由,使其获得优先权。

警告:您不会希望为您创建的每个操作都创建一条新路线。您也不希望所有操作都在同一个 Controller 中。如果出现其中一种情况,请考虑重新考虑您的方法,这样您以后就不会遇到问题......

关于asp.net-mvc-3 - 默认路由不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10435883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com