将webapi添加到mvc应用程序路由中
本文关键字:应用程序 路由 mvc webapi 添加 | 更新日期: 2023-09-27 18:36:41
我有一个具有以下路由的mvc应用程序:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
);
}
我的控制器可以访问:
http://localhost:1234/Test/Version
现在,我想为这个mvc应用程序添加一个web api。假设它被称为TestWebAPIController但是,我无法在上访问它
http://localhost:1234/TestWebAPI
或
http://localhost:1234/TestWebAPI/Get
我该怎么解决这个问题?我已经试着把路线改成了
url:"{controller}/{id}",。。。
更新:我尝试添加WebApiConfig.cs
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
并尝试添加
GlobalConfiguration.Configure(WebApiConfig.Register);
到Global.asax.cs但是我有语法错误。。。在WebConfig.cs中,它抱怨:
config.MapHttpAttributeRoutes();
并表示不包含MapHttpAttributeRoutes的定义在Global.asax.cs中,它抱怨
GlobalConfiguration.Configure(WebApiConfig.Register);
并表示System.Web.Http.GlobalConfiguration不包含"配置"的定义
更新:安装webapi后:
安装包Microsoft.AspNet.WebApi.WebHost
错误消失了,但我仍然无法路由到我的webapi。
更新:终于成功了。在global.asap.cs中,必须将webapi路由BEFOREmvc路由设置为:
GlobalConfiguration.Configure(WebApiConfig.Register);
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
还需要更改:
routeTemplate: "api/{controller}/{id}"
至
routeTemplate: "api/{controller}/{action}/{id}"
Web API不使用与MVC相同的路由。如果您在Visual Studio for Web API中启动一个新项目,或包含Web API,您将在App_start文件夹下看到一个名为WebApiConfig.cs的文件。这就是您的Web API路由的去向。这些路由是通过此类的Register()
方法注册的,使用传入的HttpConfiguration
对象:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
//other stuff
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/v1/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
//other stuff
}
}
请注意,我已经用"api/v1/"为路由做了准备。这或类似的做法通常是一种很好的做法,这样您就可以根据需要对api进行版本设置,而不会影响使用遗留api的代码。
Web-Api路由已注册到HttpConfiguration。WebApi与项目的MVC部分不共享相同的路由集合。
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
如果您正在呼叫http://localhost:1234/TestWebAPI
,那么您将无法正确路由。如果您使用的是本问题中显示的路由模板,则应该调用http://localhost:1234/api/TestWebAPI