将 webapi 添加到 mvc 应用程序 - 路由
adding webapi to an mvc app - routing
我有一个带有此路由的 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 应用程序添加一个网络 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 不包含 'Configure'
的定义
更新:
安装后 webapi:
Install-Package Microsoft.AspNet.WebApi.WebHost
错误消失了,但我仍然无法路由到我的网站api。
更新:
终于让它工作了。
在 global.asap.cs 中,您必须将 webapi 路由 放在 mvc 路由之前,如下所示:
GlobalConfiguration.Configure(WebApiConfig.Register);
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
还需要更改:
routeTemplate: "api/{controller}/{id}"
至
routeTemplate: "api/{controller}/{action}/{id}"
Web Api 路由已注册到 HttpConfiguration。 Web Api 不与项目的 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
Web API 不使用与 MVC 相同的路由。如果您在 Visual Studio 中为 Web API 启动一个新项目,或包含 Web API,您将在 App_Start 文件夹下看到一个名为 WebApiConfig.cs 的文件。这是您的 Web API 路由的去向。这些路由是通过此 class 的 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.
的代码
我有一个带有此路由的 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 应用程序添加一个网络 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 不包含 'Configure'
的定义更新: 安装后 webapi:
Install-Package Microsoft.AspNet.WebApi.WebHost
错误消失了,但我仍然无法路由到我的网站api。
更新: 终于让它工作了。 在 global.asap.cs 中,您必须将 webapi 路由 放在 mvc 路由之前,如下所示:
GlobalConfiguration.Configure(WebApiConfig.Register);
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
还需要更改:
routeTemplate: "api/{controller}/{id}"
至
routeTemplate: "api/{controller}/{action}/{id}"
Web Api 路由已注册到 HttpConfiguration。 Web Api 不与项目的 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
Web API 不使用与 MVC 相同的路由。如果您在 Visual Studio 中为 Web API 启动一个新项目,或包含 Web API,您将在 App_Start 文件夹下看到一个名为 WebApiConfig.cs 的文件。这是您的 Web API 路由的去向。这些路由是通过此 class 的 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.
的代码