2016-10-07 1 views
1

J'ai un projet aspx de mise à niveau vers mvc. Maintenant, certains de mes anciens clients appelant l'URL avec la page .aspx et ils obtiennent 404 (non trouvé) dans le projet mvc.Comment rediriger la page aspx personnalisée à la méthode d'action mvc

Alors maintenant, je dois rediriger .aspx vers la page mvc.

ancienne URL

www.domain.com/bookshop/showproduct.aspx?isbn=978-1-59333-934-0 

Nouvelle URL

www.domain.com/{product_name} 

Je pense faire via le mécanisme de routage de la lutte antivectorielle. comme une fois ce type d'url venir alors il devrait être appeler mon action mvc personnalisé et en paramètre de chaîne je vais obtenir showproduct.aspx? isbn = 978-1-59333-934-0

Pouvez-vous s'il vous plaît suggérer un meilleur moyen de faites ceci avec un minimum de code.

Répondre

1

Créer une nouvelle classe RouteHandler comme indiqué ci-dessous:

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

namespace Sample.Helpers 
{ 
    public class RouteHandler : IRouteHandler 
    { 
     public IHttpHandler GetHttpHandler(RequestContext requestContext) 
     { 
      return new ASPDotNetHttpHandler(); 
     } 
    } 

    public class ASPDotNetHttpHandler : IHttpHandler 
    { 
     public bool IsReusable 
     { 
      get 
      { 
       return true; 
      } 
     } 

     public void ProcessRequest(HttpContext context) 
     { 
      string product = context.Request.QueryString["isbn"]; 
      int index = context.Request.Url.AbsoluteUri.IndexOf("bookshop/showproduct.aspx?"); 

      if (!(string.IsNullOrEmpty(product) || index == -1)) 
      { 
       string newUrl = context.Request.Url.AbsoluteUri.Substring(0, index)+"/" + product; 
       context.Response.Redirect(newUrl, true); 
      } 
     } 
    } 
} 

Insérer nouvel itinéraire comme indiqué ci-dessous dans la méthode RegisterRoutes du fichier RouteConfig.cs:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.Add(new Route("bookshop/showproduct.aspx", new BIRS.Web.Helpers.RouteHandler()));