其他分享
首页 > 其他分享> > CodeGo.net>如何以相同的方式路由URL,像stackoverflow

CodeGo.net>如何以相同的方式路由URL,像stackoverflow

作者:互联网

我就是这样认为的

https://stackoverflow.com/questions/12333706/how-to-bla-bla-question

我认为应该有一个控制器动作和链接

@Html.ActionLink("how-to-bla-bla-question", "Questions", "Controller", new{questionId=12333706})
...
public ActionResult Questions(questionId)
{
    ...
}

通常url应该是

https://stackoverflow.com/questions/12333706/

现在,这是由javascript处理的还是有其他方法可以使带有ID和标题的网址呢?

解决方法:

我就是这样做的.

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);
}

请注意,这允许您附加一个随机的段,这正是stackoverflow所做的.但是,然后stackoverflow将您的块改正为存储在数据库中的块.这将是微不足道的.

还请注意,我已经向您展示了我的真实代码;您显然需要对其进行一些调整(但不多)以适合您的情况.重要的是在路由表中附加一个可选的url参数.在我的情况下,我完全忽略了它,这实际上也是SO正在进行的操作,因此您可以导航到该愚蠢的URL并仍然到达此处:https://stackoverflow.com/questions/12051094/i-like-to-eat-cake

标签:asp-net-mvc-routing,c,asp-net-mvc,asp-net-mvc-3,url-rewriting
来源: https://codeday.me/bug/20191127/2076660.html