我有一个只有这条路线的网站:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("Default", "{controller}/{action}/{id}",
new { controller = "Image", action = "Image", id = UrlParameter.Optional }
);
}
这是控制器:
public class ImageController : Controller
{
public ActionResult Image(int? id)
{
if (id == null)
{
// Do something
return View(model);
}
else
{
// Do something else
return View(model);
}
}
}
现在这是默认操作,所以我只需直接访问我的域即可访问它而无需ID。要调用id,它可以通过/ Image / Image / ID工作得很好。然而,我想要的是没有图像/图像(so / ID)调用它。这现在不起作用。
这是默认路由的限制还是有办法让它工作?
由于
答案 0 :(得分:3)
创建特定于此网址的新路线:
routes.MapRoute(
name: "Image Details",
url: "Image/{id}",
defaults: new { controller = "Image", action = "Image" },
constraints: new { id = @"\d+" });
请确保在此之前注册上述路线:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
否则它将无效,因为默认路由优先。
我在这里说明,如果网址包含" / Image / 1"然后执行ImageController/Image
动作方法。
public ActionResult Image(int id) { //..... // }
约束意味着{id}参数必须是一个数字(基于正则表达式\d+
),因此不需要可为空的int,除非你想要一个可为空的int,在这种情况下,删除约束。