Ho un progetto MVC4 con elmah aggiunto. Application_Start di mia global.asax() haCome ignorare una rotta in configurazione MVC4 WebAPI?
WebApiConfig.Register(GlobalConfiguration.Configuration); // #1
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes); // #2
# 1 e # 2 sono i seguenti
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional });
}
...
}
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
I modelli sono identici e di routing nei controllori funziona esattamente come lo vogliamo (da una specifica URI prospettiva). Il problema è che la route di ignora viene aggiunta DOPO che la route WebAPI è stata aggiunta. Quindi, quello che dovrebbe essere ignorato dal routing MVC4 e gestito da Elmah (es. /elmah.axd/styles
) viene invece intercettato da WebAPI e la richiesta fallisce => quindi non ho CSS nelle mie pagine elmah.axd. Ho provato a lanciare # 1 e # 2 in global.asax ma questo ha causato il fallimento di tutti gli instradamenti WebAPI - FAR peggiore di CSS che non funziona in Elmah!
Fondamentalmente ho bisogno di un modo per indicare al routing di WebAPI di ignorare {resource}.axd/{*pathInfo}
come prima via: come posso farlo?
Il percorso API Web DefaultApi sembra strano: dovrebbe essere qualcosa del tipo 'routeTemplate: "api/{Controller}/{action}/{id}",' altrimenti la MVC e percorsi WebAPI entreranno in conflitto. Hai provato un controller regolare e il controller api sta funzionando per te? – nemesv
Ho rimosso in modo specifico il prefisso 'api' perché ciò avrebbe rovinato i nostri URI pubblicati. Entrambi i controller MVC e WebAPI funzionano correttamente: prima vengono cercati i controllori WebAPI, quindi vengono cercati i controller MVC (poiché questo è l'ordine di impostazione della configurazione) – DeepSpace101
config.Routes.IgnoreRoute ("{resource} .axd/{* pathInfo} "); nella classe WebApiConfig, metodo Register. L'hai provato? – Regfor