C# 路由到仅从URL获取一个ID的操作
我正在尝试为我的mvc学习项目定制路由器。 我希望保留指向{controller}/{action}/{id}的标准路由,以防出现类似URL的情况 domain.com/user/details/72 但是如果我得到一个像这样的url domain.com/2 我想路由到一个指定的控制器操作,该操作将数字作为id。因此我不希望URL指定控制器和操作,因为我希望URL非常短,并且控制器和操作应该始终相同 我有点成功了,但我得到了非常奇怪的不可预测的结果,所以我想问我是否做了一些非常奇怪的事情。以下是我的路线:C# 路由到仅从URL获取一个ID的操作,c#,asp.net,asp.net-mvc,asp.net-mvc-routing,C#,Asp.net,Asp.net Mvc,Asp.net Mvc Routing,我正在尝试为我的mvc学习项目定制路由器。 我希望保留指向{controller}/{action}/{id}的标准路由,以防出现类似URL的情况 domain.com/user/details/72 但是如果我得到一个像这样的url domain.com/2 我想路由到一个指定的控制器操作,该操作将数字作为id。因此我不希望URL指定控制器和操作,因为我希望URL非常短,并且控制器和操作应该始终相同 我有点成功了,但我得到了非常奇怪的不可预测的结果,所以我想问我是否做了一些非常奇怪的事情。以下
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "DisplayKombak",
url: "{kombakId}",
defaults: new { controller = "Kombak", action = "DisplayKombak", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
试着这样做:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "DisplayKombak",
url: "{kombakId}",
defaults: new {controller = "Kombak", action = "DisplayKombak"}
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional}
);
}
}
和KombakController.cs:
using System.Web.Mvc;
namespace WebApplication1.Controllers
{
public class KombakController : Controller
{
public ActionResult DisplayKombak(string kombakId)
{
return View();
}
}
}
可以通过添加管线约束强制执行此行为
routes.MapRoute(
name: "DisplayKombak",
url: "{kombakId}",
defaults: new { controller = "Kombak", action = "DisplayKombak", id = UrlParameter.Optional },
new {kombakId = @"\d+" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new {controller = @"\D+" }
);
第一条路由上的约束将阻止路由匹配,除非第一条路由段是整数,否则第二条路由上的约束将阻止路由匹配,如果第一条路由段不是一串字母。您得到了什么奇怪的不可预测的结果?感谢您的回答!我的路线配置和你的有什么不同?我只能看到您的没有URLParameter。在第一个routemapping上是可选的。是吗?这改变了一切!谢谢。请注意关于路线最重要的两点。1.图案2.秩序。即使它没有解决我的问题,这也是一个很大的帮助,我学到了一些重要的东西。谢谢