2015-03-10 3 views
-1

С помощью веб-сайта я использую встроенные средства маршрутизации, доступные в новой версии ASP.NET, но они в настоящее время не являются динамическими, они жестко закодированы в кодовую базу в файле global.asax.Как динамически сопоставлять маршруты?

Не уверен, что это возможно, но существует ли способ, которым эти маршруты могут генерироваться динамически?

ответ

0

Вы можете подкласса RouteBase, чтобы сделать маршруты на основе динамического набора данных.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Web.Routing; 
using System.Web; 
using System.Web.Mvc; 

public class ProductRoute : RouteBase 
{ 

    public override RouteData GetRouteData(HttpContextBase httpContext) 
    { 
     RouteData result = null; 

     string virutalPath = httpContext.Request.Url.AbsolutePath.Substring(1).ToLowerInvariant(); 

     // Call the database here to retrieve the productId based off of the virtualPath 
     var productId = Product.GetProductIdFromVirtualPath(virutalPath); 
     if (productId != Guid.Empty) 
     { 
      result = new RouteData(this, new MvcRouteHandler()); 
      result.Values["controller"] = "Product"; 
      result.Values["action"] = "Details"; 
      result.Values["id"] = productId; 
     } 

     return result; 
    } 

    public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values) 
    { 
     VirtualPathData result = null; 
     string controller = Convert.ToString(values["controller"]); 
     string action = Convert.ToString(values["action"]); 

     if (controller == "Product") 
     { 
      string path = string.Empty; 
      if (action == "Details") 
      { 
       Guid productId = (Guid)values["id"]; 

       // Call the database here to get the Virtual Path 
       var virtualPath = Product.GetVirtualPathFromProductId(productId); 
      } 

      if (!String.IsNullOrEmpty(virtualPath)) 
      { 
       result = new VirtualPathData(this, virtualPath); 
      } 
     } 


     return result; 
    } 

} 
Смежные вопросы