没有参数的Webapi函数和使用HttpGet导致404

时间:2018-03-08 14:40:52

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

使用HttpGet并且没有参数的webapi函数似乎没有添加路由。使用此代码

using System.Web.Http;

namespace Testing
{
  public class FooController: ApiController
  {
    [HttpGet]
    [Route("foobar")]
    public FoobarOutput foobar()
    {
      return new FoobarOutput();
    }

    public class FoobarOutput
    {
      public int age;
      public string name;
    }
  }
}

浏览/foobar会导致404(未找到网页)。

但是,如果我添加一个int参数

using System.Web.Http;

namespace Testing
{
  public class FooController: ApiController
  {
    [HttpGet]
    [Route("foobar/{id}")]
    public FoobarOutput foobar(int id)
    {
      return new FoobarOutput();
    }

    public class FoobarOutput
    {
      public int age;
      public string name;
    }
  }
}

我将可以浏览/foobar/34(任何整数都可以)。

为什么我要添加参数?

(类FoobarOutput用于从函数中收集输出值。

修改

我设法调用了一个无参数函数,所以现在我需要检查它为什么不能正常工作。如果我找不到,我会删除这个问题。

1 个答案:

答案 0 :(得分:2)

确保已启用属性路由。

public static class WebApiConfig {
    public static void Register(HttpConfiguration config) {
        // Attribute routing.
        config.MapHttpAttributeRoutes();

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

并且控制器上存在适当的属性

[RoutePrefix("foobar")]
public class FooController: ApiController {

    //GET foobar
    [HttpGet]
    [Route("")]
    public IHttpActionResult foobar() {
        FoobarOutput model = new FoobarOutput();
        //...
        return Ok(model);
    }

    //GET foobar/34
    [HttpGet]
    [Route("{id:int}")]
    public IHttpActionResult foobar(int id) {
        FoobarOutput model = new FoobarOutput();
        //...
        return Ok(model);
    }

}

您的原始代码很可能使用默认的基于约定的路线

参考Attribute Routing in ASP.NET Web API 2