首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理这个路由?

如何处理这个路由?
EN

Stack Overflow用户
提问于 2011-10-24 08:42:26
回答 1查看 141关注 0票数 6

我有URL的意思是:

items)

  • /nl/blog/loont-lekker-koken-en-wordt-eerlijkheid-beloond

  • /nl/ blog (展示博客的概述)(用urltitle)

  • /nl/blog/waarom-liever-diëtist-dan-kok显示博客条目(显示带有urltitle的博客条目)

为此,我已确定了路线:

  • A:路由“nl/
  • /{ articlepage }”与约束条款页= @"\d“
  • B:路由"nl/blog”
  • C:路由“nl/blog/{urltitle}/{
    • }”带有约束评论页= @"\d“
    • D:路由

问题1:这很好,但也许有一个更好的解决方案,以减少路线?

问题2:为了添加一篇新文章,我在BlogController中有一个操作方法BlogController。当然,有了上面定义的路线,url“/nl/blog/ above”就会映射到路由D,在那里添加文章将是不正确的urltitle。因此,我添加了以下路由:

路由"nl/blog/_{action}":

  • E

因此,现在url“/nl/blog/_ action”映射到这个路由,并执行正确的操作方法。但我想知道是否有更好的方法来处理这件事?

谢谢你的建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-24 12:22:36

对我自己问题的回答:

对于第一个问题,我创建了一个自定义约束IsOptionalOrMatchesRegEx:

代码语言:javascript
复制
public class IsOptionalOrMatchesRegEx : IRouteConstraint
{
    private readonly string _regEx;

    public IsOptionalOrMatchesRegEx(string regEx)
    {
        _regEx = regEx;
    }

    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        var valueToCompare = values[parameterName].ToString();
        if (string.IsNullOrEmpty(valueToCompare)) return true;
        return Regex.IsMatch(valueToCompare, _regEx);
    }
}

然后,路线A和B可以用一条路线表示:

"nl/blog/{articlepage}"

  • defaultvalues:
  • url:新的{ articlepage = UrlParameter.Optional }
    • 约束:新的{=新的

对于问题2,我创建了一个ExcludeConstraint:

代码语言:javascript
复制
public class ExcludeConstraint : IRouteConstraint
{
    private readonly List<string> _excludedList;

    public ExcludeConstraint(List<string> excludedList)
    {
        _excludedList = excludedList;
    }

    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        var valueToCompare = (string)values[parameterName];
        return !_excludedList.Contains(valueToCompare);            
    }
}

然后,可以改变路线D如下:

"nl/blog/{urltitle}"

  • constraints:
  • url:
  • { urltitle =( new (){ "addarticle",“add注释”,"gettags" }) );
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7873091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档