当前位置:  开发笔记 > 程序员 > 正文

堆栈溢出问题路由

如何解决《堆栈溢出问题路由》经验,为你挑选了1个好方法。

如果您查看SO问题URL,您将看到ID和"SLUG"被传递给Questions控制器:https://stackoverflow.com/questions/676934/what-do-you-need-to-write-your - 博客引擎.我感到有趣的是,您可以更改URL的"SLUG"部分,而不会影响应用程序路由请求示例的能力.我能想到的唯一方法就是有一条接受id和"SLUG"的路线,并在slug上使用路线约束来确保它遵循一个模式.我必须使用约束来确保两个变量不会导致此路由匹配所有请求.有没有人有更好的方法来实现这一点,或任何更高级的路由方案的例子?

加成:

我意识到SLUG是为了人类的可读性,我想在另一个应用程序中复制此功能.实现这一目标的最佳方法是什么?

路线:

routes.MapRoute(
    "Id + Slug",          // Route name
    "Test/{id}/{slug}",   // URL with parameters
    new                   // Parameter defaults
    {
        controller = "Test", 
        action = "Details", 
        id = "", 
        slug = "" 
    },  
    new { slug = new SlugConstraint() }
);

简单约束:

public class SlugConstraint : IRouteConstraint
{
    public bool Match(HttpContextBase httpContext,
        Route route,
        string parameterName,
        RouteValueDictionary values,
        RouteDirection routeDirection)
    {
        string value = values[parameterName].ToString();

        return value.Contains("-");
    }
}

JoshJordan.. 8

你根本不需要使用slug.它可能仅适用于人类可读性和搜索引擎优化.您可以在路由时忽略它,只需处理ID.

例如,点击这里:

堆栈溢出问题路由



1> JoshJordan..:

你根本不需要使用slug.它可能仅适用于人类可读性和搜索引擎优化.您可以在路由时忽略它,只需处理ID.

例如,点击这里:

堆栈溢出问题路由

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有