C# 如何在命名空间中路由混合的MVCAPApplication和WebAPApplication?

C# 如何在命名空间中路由混合的MVCAPApplication和WebAPApplication?,c#,asp.net-mvc,api,asp.net-mvc-routing,C#,Asp.net Mvc,Api,Asp.net Mvc Routing,我有一个带有两个控制器的MVC应用程序,一个用作webapicapplication,另一个用作常规mvcapapplication。我以某种方式配置了只有API才能访问的路由 你能帮我配置一下,让我可以同时访问两个控制器吗 我可以通过指向http://localhost/api/data。但是,我无法访问mvcapapplication Index方法。我的期望是通过指向http://localhost/Notification但我得到了错误404 这是我的控制器C#源代码: //Defaul

我有一个带有两个控制器的MVC应用程序,一个用作
webapicapplication
,另一个用作常规
mvcapapplication
。我以某种方式配置了只有API才能访问的路由

你能帮我配置一下,让我可以同时访问两个控制器吗

我可以通过指向
http://localhost/api/data
。但是,我无法访问mvcapapplication Index方法。我的期望是通过指向
http://localhost/Notification
但我得到了错误404

这是我的控制器C#源代码:

//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());
        }
    }
}
下面是我如何设置到这两个控制器的路由:

//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 }
            );
        }
    }
}

正如@ChimaOsuji在评论中提到的


您已经创建了两个应用程序,
webapicapplication
mvcapapplication
。 您只需要一个,在其中为MVC和API注册路由 控制器

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);
        }
    }
}

只需将两个应用程序合并为一个:

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);
    }
}

您已经创建了两个应用程序:webapicapplication和mvcapapplication。您只需要一个,在其中为MVC和API控制器注册路由。@ChimaOsuji您的观察是正确的。如果可以的话,请展示一个快速的例子。@ChimaOsuji谢谢你的输入,你能发布一个例子吗?