c# - 如何以与 stackoverflow 相同的方式路由 URL

标签 c# asp.net-mvc asp.net-mvc-3 url-rewriting asp.net-mvc-routing

我认为这是可行的

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

我认为应该有 Controller 操作和链接

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

通常url应该是

http://stackoverflow.com/questions/12333706/

现在这是由 javascript 处理还是有一些其他方法如何在它之后制作带有 ID 和标题的 url?

最佳答案

我就是这样做的。

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

然后在 Controller 中这样的东西:

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 更正为存储在数据库中的 slug。这将是微不足道的实现。

另请注意,我已经向您展示了我的真实代码;你显然需要稍微调整一下(但不要太多)以适应你的场景。重要的一点是在路由表中附加一个可选的 url 参数。在我的例子中,我完全忽略了它,这实际上也是 SO 在进入的过程中所做的,因此你可以导航到这个愚蠢的 URL 并仍然到达这里:https://stackoverflow.com/questions/12051094/i-like-to-eat-cake

关于c# - 如何以与 stackoverflow 相同的方式路由 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12051094/

相关文章:

c# - MATLAB/.NET Interop - 不允许在 .NET 对象上设置属性

c# - 如何在 PartialViews 内连接使用 HtmlHelper 扩展生成的 JavaScript 并添加到父 View ?

c# - 在 C# 中为循环中的方法创建线程

jquery - 在客户端将 MVC 复选框设置为只读(或禁用)

C#/MVC 验证模型数据并根据结果调用外部 API

asp.net-mvc-3 - 在 Azure 上的两个 ASP.NET MVC 3 应用程序之间共享数据库

asp.net-mvc-3 - MVC3 _Layout.cshtml...禁用/启用菜单项

ASP.NET MVC3 RC2 从请求参数到方法参数的绑定(bind)错误

c# - Richtextbox 键入时的数据绑定(bind)问题

c# - 为什么我的选择排序算法始终比插入排序算法快?