仅为某些Web API方法获取404

时间:2014-05-12 16:23:54

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

我刚刚向我的一个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]修饰,而且没有人接受任何参数。谢谢!

1 个答案:

答案 0 :(得分:2)

老实说,我很惊讶你们两个都没有得到404。你是否定义了其他路线和/或GetFoo在其他地方宣布了?

我在此处看到的问题是您为{controller}定义了默认值,但该路径中未使用该占位符。相反,您尝试将其设置为misc,并且您的控制器类名为MiscellaneousApiController。如果您将路线模板更改为api/miscellaneousapi/{action}

,它是否有效