加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 03:37:49 所属栏目:asp.Net 来源:网络整理
导读:为什么这不起作用? 路线: routes.MapRoute( "Summary","{controller}/{id}",new { controller = "Summary",action = "Default" } ); 控制器: public class SummaryController : Controller { public ActionResult Default(int id) { Summary summary = Ge
为什么这不起作用?

路线:

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

控制器:

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",action = "Default" }
                );

解决方法

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

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

routes.MapRoute(

    // Route name
    "Default",// URL with parameters
    "{controller}/{action}/{id}",// Parameter defaults
    new { controller = "Home",action = "Index",id = UrlParameter.Optional } 

);

让我们试着理解这个是如何工作的.

>如果访问/,它将调用Home控制器的Index操作;省略了可选的Id.
>如果访问/ C,它将调用C控制器的Index操作;省略了可选的Id.
>如果访问/ C / A,它将调用C控制器的A动作;省略了可选的Id.
>如果访问/ C / A / 1,它将调用ID为1的C控制器的A动作.

因此,该路由允许任何形式为/,/ C,/ C / A和/ C / A / 1的URL,其中C是控制器,A是动作.这是什么意思?这意味着您不必指定自己的路线.

因此,如果没有路由,您可以只拥有一个HomeController和一个SummaryController,并向最后一个名为Show的控制器添加一个动作.

然后/ Summary / Show / 1会调用SummaryController.Show(1)

如果我想为控制器设置更短的路径(/ Controller / Id)怎么办?

假设我们想要映射路由,使得/ Summary / 1调用SummaryController.Show(1).

这是正确的形式:

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

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

请注意,我们已将Home路由更改为默认路由.现在我们添加了一个Summary路由,我们告诉我们,Summary / {id}形式的URL将触发该路由.当它们执行时,它调用Summary控制器的Show操作并将id作为参数传递;这正是你想要的……

另请注意,我们需要首先放置Summary路由,使其优先.

警告:您不希望为您创建的每个操作创建新路由.您也不希望所有操作都在同一个控制器中.如果其中一个是这种情况,请考虑重新考虑您的方法,以便您以后不会遇到问题……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读