2017-11-10 8 views
0

私はasp.net mvcで親切なルーティングをしていますが、基本的にはidと一緒に広告タイトルがありますが、それはidをactionに渡しますが、urlにtitle + idを表示します。どのようにasp.net mvcのようなasp.netコアでSEOフレンドリーなルーティングを処理するには?

ここにコードがあります。

routes.Add("ClinicDetails", new SeoFriendlyRoute("veterinary-clinics/{id}/details", 
       new RouteValueDictionary(new { controller = "clinics", action = "details" }), 
       new MvcRouteHandler())); 


public class SeoFriendlyRoute : Route 
    { 
     public SeoFriendlyRoute(string url, RouteValueDictionary defaults, IRouteHandler routeHandler) : base(url, defaults, routeHandler) 
     { 
     } 
     public SeoFriendlyRoute(string url, RouteValueDictionary defaults, IRouteHandler routeHandler, IEnumerable namespaces) : base(url, defaults, routeHandler) 
     { 
      DataTokens = defaults; 
      defaults["Namespaces"] = namespaces; 
     } 
     public override RouteData GetRouteData(HttpContextBase httpContext) 
     { 
      var routeData = base.GetRouteData(httpContext); 
      if (routeData == null) return null; 
      if (routeData.Values.ContainsKey("id")) 
       routeData.Values["id"] = GetIdValue(routeData.Values["id"]); 
      return routeData; 
     } 
     private object GetIdValue(object id) 
     { 
      if (id == null) return null; 
      var idValue = id.ToString(); 
      var regex = new Regex(@"^[\w|\W]+-(?<id>\d+).*$"); 
      var match = regex.Match(idValue); 
      return match.Success ? match.Groups["id"].Value : id; 
     } 
    } 

どのように私はasp.netコアでこの同じ機能を得ることができます。ここで

答えて

0

が解決され、私は

public static class RouteExtensions 
     { 
      public static IRouteBuilder MapSeoFriendlyRoute(this IRouteBuilder routeBuilder, string name, 
       string template, object defaults) 
      { 
       var inlineConstraintResolver = (IInlineConstraintResolver)routeBuilder 
        .ServiceProvider 
        .GetService(typeof(IInlineConstraintResolver)); 

       var defaultsDictionary = new RouteValueDictionary(defaults); 
       routeBuilder.Routes.Add(new SeoFriendlyRoute(routeBuilder.DefaultHandler, 
       name, 
       template, 
       defaultsDictionary, 
       constraints: null, 
       dataTokens: null, 
       inlineConstraintResolver: inlineConstraintResolver)); 
       return routeBuilder; 
      } 
     } 


     public class SeoFriendlyRoute : Route 
     { 
      public SeoFriendlyRoute(IRouter target, string routeTemplate, IInlineConstraintResolver inlineConstraintResolver) : base(target, routeTemplate, inlineConstraintResolver) 
      { 
      } 

      public SeoFriendlyRoute(IRouter target, string routeTemplate, RouteValueDictionary defaults, IDictionary<string, object> constraints, RouteValueDictionary dataTokens, IInlineConstraintResolver inlineConstraintResolver) : base(target, routeTemplate, defaults, constraints, dataTokens, inlineConstraintResolver) 
      { 
      } 

      public SeoFriendlyRoute(IRouter target, string routeName, string routeTemplate, RouteValueDictionary defaults, IDictionary<string, object> constraints, RouteValueDictionary dataTokens, IInlineConstraintResolver inlineConstraintResolver) : base(target, routeName, routeTemplate, defaults, constraints, dataTokens, inlineConstraintResolver) 
      { 
      } 

      protected override Task OnRouteMatched(RouteContext context) 
      { 
       var routeData = context.RouteData; 
       if (routeData != null) 
       { 
        if (routeData.Values.ContainsKey("id")) 
         routeData.Values["id"] = GetIdValue(routeData.Values["id"]); 
       } 
       return base.OnRouteMatched(context); 
      } 

      public override Task RouteAsync(RouteContext context) 
      { 
       return base.RouteAsync(context); 
      } 

      private object GetIdValue(object id) 
      { 
       if (id == null) return null; 
       var idValue = id.ToString(); 
       var regex = new Regex(@"^[\w|\W]+-(?<id>\d+).*$"); 
       var match = regex.Match(idValue); 
       return match.Success ? match.Groups["id"].Value : id; 
      } 
     } 

routes.MapSeoFriendlyRoute("AdDetails", "ads/{id}/details", 
       defaults: new { controller = "ads", action = "details" }); 
それを自分自身を発見しました
関連する問題