我刚刚向我的一个WebAPI控制器添加了两个方法,这些方法旨在与GET一起使用。我已经在控制器中有一个这样的方法,它工作得非常好,所以我知道它在这个意义上不会成为路由问题。
以下是我的webapiconfig.cs:
config.Routes.MapHttpRoute(
name: "MiscellaneousApi",
routeTemplate: "api/misc/{action}",
defaults: new {controller = "miscellaneousapi"});
以下是工作方法(GetFoo)和404方法(GetBar)的简化声明:
namespace MyControllers {
public class MiscellaneousApiController : ApiController {
[HttpGet]
[ActionName("GetFoo")
public HttpResponseMessage GetFoo()
{
return Request.CreateResponse(HttpStatusCode.OK);
}
[HttpGet]
[ActionName("GetBar")]
public HttpResponseMessage GetBar()
{
return Request.CreateResponse(HttpStatusCode.OK);
}
}
}
正如我所说,它适用于GetFoo方法。
我已经添加了GetBar,当我将URL放入我的浏览器或Fiddler时,我得到了404.我试图将这些方法放在另一个控制器中并在那里得到404。发生了什么事?为什么GetFoo工作正常并且GetBar完全失败?功能上两者之间没有区别。我可以理解,如果这是一个非404错误,那里面的逻辑有问题,但它是404我接收的。
是的,我已经仔细检查过我正确地输入了网址,每个都用[HttpGet]修饰,而且没有人接受任何参数。谢谢!
答案 0 :(得分:2)
老实说,我很惊讶你们两个都没有得到404。你是否定义了其他路线和/或GetFoo在其他地方宣布了?
我在此处看到的问题是您为{controller}
定义了默认值,但该路径中未使用该占位符。相反,您尝试将其设置为misc
,并且您的控制器类名为MiscellaneousApiController
。如果您将路线模板更改为api/miscellaneousapi/{action}
?