ASP.NET MVC全能路由

我已经在StackOverflow上阅读了一些关于此的线程,但无法使其工作.我在Global.asax的RegisterRoutes结尾处有这个. routes.MapRoute( Profile, {*url}, new { controller = Profile, action = Index }

我已经在StackOverflow上阅读了一些关于此的线程,但无法使其工作.我在Global.asax的RegisterRoutes结尾处有这个.

routes.MapRoute(
            "Profile","{*url}",new { controller = "Profile",action = "Index" }
            );

基本上我想要实现的是让mydomain.com/Username指向我的成员个人资料页面.我如何设置我的控制器和RegisterRoutes以使其工作?

目前mydomain.com/somethingthatisnotacontrollername出现404错误.

解决方法

解决方案适用于您的情况但不建议使用

您的应用程序中有一组预定义的控制器(通常少于10个),因此您可以对控制器名称设置约束,然后将其他所有控制器路由到用户配置文件:

routes.MapRoute(
    "Default","{controller}/{action}/{id}",new { controller = "Home",action = "Index",id = UrlParameter.Optional },new { controller = "Home|Admin|Reports|..." }
);
routes.MapRoute(
    "Profile","{username}/{action}",action = "Details" }
);

但是,如果某些用户名与您的控制器名称相同,则无法使用.根据经验最终的经验数据,这是一个小的可能性,但它不是0%的机会.当用户名与某个控制器相同时,它自动意味着它将由第一个路由处理,因为约束不会使它失败.

推荐解决方案

最好的方法是将URL请求改为:

www.mydomain.com/profile/username

为什么我推荐这样做?因此,这将使其更简单和更清洁,并允许有几个不同的配置文件页面:

>详情www.mydomain.com/profile/username
>设置www.mydomain.com/profile/username/settings
>消息www.mydomain.com/profile/username/messages
>等

在这种情况下,路由定义将是这样的:

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

作者: dawei

【声明】:永州站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐

联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部