WebAPI路由到根URL

时间:2015-12-30 03:02:14

标签: c# asp.net api asp.net-web-api

我有一个WebAPI应用程序,用于数据库中的某些RESTful操作。它工作得很好,但我希望将路由与根URL匹配。例如,我想转到网站的根目录,看看一些动态生成的有用信息。

目前,我已将其设置为符合api/{controller}/{action}的标准惯例,但如何在导航到根目录而不是像api/diagnostics/all这样的内容时显示此信息?

基本上我想要的是,当用户导航到根URL时,我想将该请求路由到TestController.Index()

我在WebApiConfig.cs文件中进行了以下设置:

public static void Register(HttpConfiguration config)
{
    // Web API routes
    config.MapHttpAttributeRoutes();

    config.Routes.MapHttpRoute(
        name: "Index",
        routeTemplate: "",
        defaults: new { controller = "Test", action = "Index" }
    );

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

这就是我的TestController.cs的样子:

[RoutePrefix("api")]
public class TestController : ApiController
{

    [Route("TestService"), HttpGet]
    public string Index()
    {
         return "Service is running normally...";
    }        
}

3 个答案:

答案 0 :(得分:6)

您可以在WebApiConfig.cs中为默认URL添加路由。以下是根URL映射到方法HomeController.Index()的示例:

config.Routes.MapHttpRoute(
    name: "Root",
    routeTemplate: "",   // indicates the root URL
    defaults: new { controller = "Home", action = "Index" }   // the controller action to handle this URL
);

答案 1 :(得分:5)

你也可以简单地使用([Route("")]):

public class TestController : ApiController
{

    [Route(""), HttpGet]
    public string Index()
    {
         return "Service is running normally...";
    }        
}

答案 2 :(得分:4)

  

基本上我想要的是,当用户导航到根URL时,我   想要将该请求路由到TestController.Index()

在这种情况下,请确保您没有使用此属性修饰TestController.Index操作:

[Route("TestService")]

所以这里是你的TestController的样子:

[RoutePrefix("api")]
public class TestController : ApiController
{
    [HttpGet]
    public string Index()
    {
        return "Service is running normally...";
    }
}

现在只需导航到//api