我就是这样做的。
Global.asax 片段:
routes.MapRoute(
"GotoPostOrPage",
"p/{dataItemTypeId}/{dataItemId}/{ignored}", // This allows you to append a random slug if you like
new { controller = "DataItem", action = "Details", ignored = UrlParameter.Optional }
);
然后在控制器中是这样的:
public PartialViewResult Details(int dataItemTypeId, int dataItemId)
{
IDataItemView dataItem = _dataItemService.SelectDataItem(dataItemTypeId, dataItemId);
DataItemViewModel vm = MappingFunctions.DataItemToViewModel(dataItem);
return PartialView("_Details", vm);
}
请注意,这允许您附加一个随机 slug,这正是 stackoverflow 所做的。但是,stackoverflow 然后将您的 slug 更正为存储在数据库中的那个。这将是微不足道的。
另请注意,我已经向您展示了我的真实代码;您显然需要稍微调整一下(但不多)以适应您的情况。重要的一点是在路由表中附加一个可选的 url 参数。就我而言,我完全忽略了它,这实际上也是 SO 在进入的过程中所做的事情,因此您可以导航到这个愚蠢的 URL 并仍然到达这里:https ://stackoverflow.com/questions/12051094/i-like-to -吃蛋糕