C# 如何在命名空间中路由混合的MVCAPApplication和WebAPApplication?
我有一个带有两个控制器的MVC应用程序,一个用作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
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谢谢你的输入,你能发布一个例子吗?