2015-07-20 13 views
6

Dopo l'aggiornamento alla V8.1 dalla V6.1, il nostro codice personalizzato MVC non funzionava, restituiva 404 (il codice personalizzato è alcune API che leggono i dati di contenuto e commercio utilizzando le API di Sitefinity).Sitefinity 8.1 instradamento personalizzato MVC non funzionante

In base alla documentazione "here", si diceva che "Bootstrapper.MVC.MapRoute è stato rimosso. Chiama invece RouteTable.Routes.MapRoute (System.Web.Mvc)." , Così ho cambiato il mio codice da

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    Bootstrapper.MVC.MapRoute(
      "ExternalAccess", 
      "baseApi/{controller}/{action}/{id}", 
      new { controller = "MvcMainApiCntr", action = "Index", id = "" } 
      ); 
} 

a

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "ExternalAccess", 
     "baseApi/{controller}/{action}/{id}", 
     new { controller = "MvcMainApiCntr", action = "Index", id = "" } 
     ); 
} 

Ma il percorso non funziona ancora.

Ecco un esempio delle nostre classi MVC:

using System; 
using System.IO; 
using System.Net; 
using System.Web.Mvc; 
using HtmlAgilityPack; 
using Telerik.Sitefinity.Abstractions; 

namespace SitefinityWebApp.Mvc.Controllers 
{ 
    public class SharedAssetsController : Controller 
    { 
     [HttpGet] 
     public ViewResult GetScripts() 
     { 
      var rootUrl = anyfunction(); 
      return View("Scripts", (object) rootUrl); 
     }   
    } 
} 

Ed ecco come ci leghiamo routing in global.ascx:

protected void Application_Start(object sender, EventArgs e) 
{ 
    RouteConfig.RegisterRoutes(RouteTable.Routes); //the first method in that post 
    Bootstrap.BootstrapSitefinity(); 
} 

Qualche idea su come possiamo resole che?

risposta

5

Ho ricevuto il seguente consiglio dal Supporto Sitefinity, penso che funzioni bene ora.

Riguardo a questo problema, provare a muovere la registrazione rotta nella HttpApplication classe globale come:

void Bootstrapper_Initialized(object sender, Telerik.Sitefinity.Data.ExecutedEventArgs e) 
{ 
    if (e.CommandName == "RegisterRoutes") 
    { 
     RegisterRoutes(RouteTable.Routes); 
    } 
} 

E anche nella "baseApi" cercare di evitare di usare il prefisso "ext" in quanto tale prefisso viene utilizzato da Sitefinity e potrebbe avere alcuni problemi.

+0

Puoi spiegare quali problemi potrebbero essere causati da: "E anche nel 'baseApi' cerca di evitare di utilizzare il prefisso 'ext' in quanto tale prefisso viene utilizzato da Sitefinity e potrebbe avere alcuni problemi."? E come questo è legato alla tua domanda? –

+0

Il problema che noi chiamiamo "RegisterRoutes" da Global.asax.cs "Application_Start()". ma dovrebbe essere spostato nel gestore di eventi di "Bootstrapper.Initialized" ==> nel nostro caso "Bootstrapper.Initialized + = OnSitefinityAppInitialized", a condizione che venga eseguito solo quando un nome di comando come "e.CommandName ==" RegisterRoutes " ". In realtà non ne conosco il motivo esatto, ma questa è stata la raccomandazione del team di supporto di Sitefinity e questa soluzione ha risolto il problema precedente/e ora tutte le mie API e le chiamate MVC funzionano di nuovo bene in sitefinity v8.1. –

+0

riguardo al prefisso 'ext', in realtà è stato raccomandato dal team di supporto per essere modificato, ma non l'ho modificato e funziona bene con me. –