为什么我的要求走错路线?

时间:2016-11-07 22:29:29

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

我的请求正在运行,但它没有走向正确的路线。我不明白为什么。

当我启动项目时,我收到了'200 ok'响应,但它的路线错误。

我想要路线http://localhost:4047/api/[controller],而是http://localhost:4047/正在运作!我在哪里指定这条路线。

  

这是控制器。

[EnableCors(origins: "*", headers: "*", methods: "*")]
[Route("api/[controller]")]
public class MenuController : ApiController
{
    private IMenuRepo xMenuRepo;
    public MenuController(IMenuRepo iopt)
    {
        xMenuRepo = iopt;
    }
    [HttpGet]
    [Route("")]
    public HttpResponseMessage GetOk()
    {
        return new HttpResponseMessage(HttpStatusCode.OK);
    }
}
  

这是WebApiConfig

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

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}"
    );
}
  

这是Route Config

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "api/{controller}",
        defaults: new { controller = "Home" }
    );
}

据我所知,api/Menu应该是正确的路线。

1 个答案:

答案 0 :(得分:2)

是的,您正在指定路线

//GET /
[HttpGet]
[Route("")]
public HttpResponseMessage GetOk()
{
    return new HttpResponseMessage(HttpStatusCode.OK);
}

控制器需要路由前缀,而示例仅指定控制器路由。

更改为:

[EnableCors(origins: "*", headers: "*", methods: "*")]
[RoutePrefix("api/Menu")]
public class MenuController : ApiController {
    private IMenuRepo xMenuRepo;
    public MenuController(IMenuRepo iopt) {
        xMenuRepo = iopt;
    }

    //GET api/Menu
    [HttpGet]
    [Route("")]
    public HttpResponseMessage GetOk() {
        return new HttpResponseMessage(HttpStatusCode.OK);
    }
}

OP [Route("api/[controller]")]中的语法适用于asp.net-core

来源:Attribute Routing in ASP.NET Web API 2