将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}"

将webapi添加到mvc应用程序路由中

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