使用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
用于从函数中收集输出值。
我设法调用了一个无参数函数,所以现在我需要检查它为什么不能正常工作。如果我找不到,我会删除这个问题。
答案 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);
}
}
您的原始代码很可能使用默认的基于约定的路线