c# - route - Problema al usar IAppBuilder.UseWebApi
web api 2 route config (1)
Estoy creando un SPA (aplicación de página Singe) usando WebApis en ASP .NET MVC5. Para WebAPis estoy usando el enrutamiento de atributos. Para solicitudes que no sean API web, configuré una ruta Catch-All que se asigna al controlador Home y la acción Index Aquí está mi código
Tengo el siguiente código de configuración en mi archivo StartUp.cs
using System.Web.Routing;
[assembly: OwinStartup(typeof(MyApp.Startup))]
namespace MyApp
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
GlobalConfiguration.Configure(WebApiConfig.Register);
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
//app.UseWebApi(GlobalConfiguration.Configuration);
}
}
}
Mi método WebApiConfig.Register es el siguiente
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Para las rutas que no sean WebApis, tengo la siguiente ruta registrada
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "CatchAll",
url: "{*url}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
Ahora en el método de Configuración en la clase de Inicio, si descomenta esta línea
app.UseWebApi(GlobalConfiguration.Configuration)
e intento acceder a cualquier ruta, obtengo este error
<Error>
<Message>
No HTTP resource was found that matches the request URI ''http://localhost:17212/orders''.
</Message>
<MessageDetail>
No type was found that matches the controller named ''Home''.
</MessageDetail>
</Error>
Por qué pasó esto ? ¿Está bien mantener esta línea comentada?
Estás mezclando configuraciones. app.UseWebApi
es principalmente para OWIN pipline no MVC, por lo que cuando usa esa configuración, niega su configuración de MVC a medida que se encarga de la inspección de las solicitudes entrantes. Si está mezclando tanto MVC como API web, puede mantener esa línea comentada de forma segura.