2017-10-17 110 views
1

我使用Visual Studio创建了一个API,并删除了所有我不想使用的内容。一切都很好,直到现在。现在我正在尝试更改API的默认路由,但它不起作用。我想调用localhost,我希望我的API重定向到QueryController。更改时默认路由不工作

我RouteConfig.cs是这样的:

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

我QueryController.cs是这样的:

public class QueryController: ApiController 
{ 
    public ResultRecord Get ([FromUri] RequestRecord request) 
    { 
     ... 
    } 
} 

我的Global.asax:

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 
    GlobalConfiguration.Configure (WebApiConfig.Register); 
    FilterConfig.RegisterGlobalFilters (GlobalFilters.Filters); 
    RouteConfig.RegisterRoutes (RouteTable.Routes);  
} 

当我打电话本地主机:port/api /查询它工作正常。但是,如果我只运行localhost:port,它永远不会到达QueryController。任何想法为什么?我读过一些其他线程,但我无法改变这一点。

+0

你有Global.asax这行代码吗? 'GlobalConfiguration.Configure(WebApiConfig.Register);' – MacakM

+0

在你的url中:“{controller}/{action}/{id}”你缺少'api',这不是问题吗? – MacakM

+0

@MacakM我注意到了。其实改变我的WebApiConfig.cs后,它工作正常=) – Crasher

回答

1

更改了路线被用于你的MVC控制器,而不是为你的Web API控制器:

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

注意如何这条路线不包括api/

你需要改变你的WebAPI的路线,是这样的:

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

这将使你的目标localhost:port/api并获得QueryController.Get

+0

钉牢它!我只是改变了我的WebApiConfig,它工作\ o /谢谢@Kirk – Crasher