路由不工作 - Webapi ASP.NET

时间:2017-05-16 13:04:37

标签: asp.net-mvc asp.net-web-api

我在Home视图下有一个带有索引页面(静态html)的mvc应用程序。我可以查看该页面。 routeconfig是:

routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

我正在添加一个WebAPI控制器,并尝试调用Get。

public class TopicsController : ApiController
    {
         public string Get()
        {
            return "Hello WebAPI";
        }

    }

Webapi中的路由配置是:

config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

添加了应用程序启动功能:

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();


            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            WebApiConfig.Register(GlobalConfiguration.Configuration);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }

当我尝试以下内容时:

  

http://localhost:11001/api/Topics

我收到以下错误:

未找到:( 抱歉,您尝试查看的页面不存在。

2 个答案:

答案 0 :(得分:1)

看一下visual studio中的默认项目,您会注意到添加路由的顺序非常重要,因为'api / topics'algo与mvc路由匹配,这就是为什么它告诉你它没有'存在,因为你没有'api'控制器。

将其更改为:

AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);

留下其余的就像你拥有它一样

编辑:

更新了答案,以反映问题中的WebAPI版本。

但是在最新版本的WebAPI中:

WebApiConfig.Register(GlobalConfiguration.Configuration);

应该是:

GlobalConfiguration.Configure(WebApiConfig.Register);

答案 1 :(得分:1)

尝试更改Global.asax

中的注册顺序
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);