2016-03-24 21 views
2

İki denetleyicili bir MVC uygulamasına sahibim, Biri WebAPiApplication olarak çalıştı ve ikincisi düzenli olarak MvCApplication olarak çalıştı. Rotayı yalnızca API'nin erişilebilir olduğu bir şekilde yapılandırdım.Nasıl MvcApplication ve WebApiApplication bir ad alanında karıştırılır?

Her iki denetleyiciye erişebileceğim şekilde yapılandırmama yardımcı olabilir misiniz?

DefaultController numaralı API'ye http://localhost/api/data işaretini kullanarak erişebilirim. Ancak, MvcApplication Index yöntemine erişemiyorum. Benim beklentim http://localhost/Notification poinitng tarafından erişmek için ama 404 hata alıyorum! İşte

benim Kontrolörler C# kaynak kodu: Burada

//DefaultController.cs  
namespace MyApp.Controllers 
{ 
    [RoutePrefix("api")] 
    public class DefaultController : ApiController 
    { 
     [Route("data")] 
     [AcceptVerbs("GET")] 
     public HttpResponseMessage GetMeData() 
     { 
      XYZ... 
     } 
    } 
} 

//NotificationController.cs  
namespace MyApp.Controllers 
{ 
    public class NotificationController : Controller 
    {  
     public ActionResult Index() 
     { 
      return this.Jsonp(Rep.All()); 
     } 
    } 
} 

Ve nasıl kurulum bu iki denetleyicileri için yolları: @ChimaOsuji yorumlarına belirtildiği gibi

//Global.asax.cs 
namespace MyApp 
{ 
    public class WebApiApplication : System.Web.HttpApplication 
    { 
     protected void Application_Start() 
     { 
      GlobalConfiguration.Configure(WebApiConfig.Register); 
     } 
    } 

    public class MvcApplication : System.Web.HttpApplication 
    { 
     public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
     { 
      filters.Add(new HandleErrorAttribute()); 
     } 

     public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");  
      routes.MapRoute(
       "Notification", // Route name 
       "{controller}/{action}", // URL with parameters 
       new { controller = "Notification", action = "Index" } // Parameter defaults 
      ); 
     }  
     protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas();  
      RegisterGlobalFilters(GlobalFilters.Filters); 
      RegisterRoutes(RouteTable.Routes); 
     } 
    } 
} 

//WebApiConfig.cs 
namespace MyApp 
{ 
    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 } 
      ); 
     } 
    } 
} 
+2

İki uygulamalarını WebApiApplication ve MvcApplication oluşturduk. Sadece MVC ve API denetleyicileri için rotaları kaydettiğiniz bir taneye ihtiyacınız var. –

+1

@ ChimaOsuji size gözlem doğru. Mümkünse hızlı bir örnek göster. – Nkosi

+0

@ChimaOsuji Girişiniz için teşekkürler, bir örnek gönderir misiniz? – user37750

cevap

1

,

İki uygulama oluşturdunuz, WebApiApplication ve MvcApplication. Sadece MVC ve API denetleyicileri için rotaları kaydettiğiniz bir taneye ihtiyacınız var.

Global.asax.cs

namespace MyApp 
{ 

    public class WebApplication : System.Web.HttpApplication 
    { 
     public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
     { 
      filters.Add(new HandleErrorAttribute()); 
     } 

     public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");  
      routes.MapRoute(
       "Notification", // Route name 
       "{controller}/{action}", // URL with parameters 
       new { controller = "Notification", action = "Index" } // Parameter defaults 
      ); 
     }  
     protected void Application_Start() 
     { 
      //Web api config 
      GlobalConfiguration.Configure(WebApiConfig.Register); 
      //MVC config 
      AreaRegistration.RegisterAllAreas();  
      RegisterGlobalFilters(GlobalFilters.Filters); 
      RegisterRoutes(RouteTable.Routes); 
     } 
    } 
} 
1

Sadece biri halinde iki uygulama birleştirmek:

public class WebApiApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     // this is the call to register your WebApi routes 
     GlobalConfiguration.Configure(WebApiConfig.Register); 

     // this is the call to register your MVC routes 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 

     // register other components... 
     AreaRegistration.RegisterAllAreas();  
     RegisterGlobalFilters(GlobalFilters.Filters); 
    } 
}