C# 仅为某些WebAPI方法获取404
我今天刚刚在我的一个WebAPI控制器中添加了两个方法,用于GET。我在控制器中已经有一个这样的方法,它工作得非常好,所以我知道从这个意义上讲,它不可能是一个路由问题 以下是我的webapiconfig.cs:C# 仅为某些WebAPI方法获取404,c#,asp.net-web-api,C#,Asp.net Web Api,我今天刚刚在我的一个WebAPI控制器中添加了两个方法,用于GET。我在控制器中已经有一个这样的方法,它工作得非常好,所以我知道从这个意义上讲,它不可能是一个路由问题 以下是我的webapiconfig.cs: config.Routes.MapHttpRoute( name: "MiscellaneousApi", routeTemplate: "api/misc/{action}", defaults: new {controller = "miscellaneous
config.Routes.MapHttpRoute(
name: "MiscellaneousApi",
routeTemplate: "api/misc/{action}",
defaults: new {controller = "miscellaneousapi"});
以下是工作方法(GetFoo)和404方法(GetBar)的简化声明:
正如我所说的,它对于GetFoo方法很有效
我添加了GetBar,当我将URL输入到浏览器或Fiddler中时,会得到404。我尝试将这些方法放在另一个控制器中,并在那里得到了404。发生什么事?为什么GetFoo工作得很好,而GetBar完全失败了?他们两个在功能上没有区别。我可以理解,如果这是一个非404错误,里面的逻辑有问题,但我收到的是404
是的,我已经仔细检查了我输入的url是否正确,每个url都用[HttpGet]修饰,没有一个接受任何参数。谢谢 我真的很惊讶你两个都没有得到404。您是否定义了其他路由和/或在其他地方声明了GetFoo
我在这里看到的问题是,您正在为
{controller}
定义一个默认值,但该占位符未在路由中使用。相反,您试图将其设置为misc
,并且您的控制器类名为mischellaneousapicontroller
。如果将路由模板更改为api/miscellaneousapi/{action},是否有效
?你有关于GetBar
操作的任何参数吗..你能分享一下它的样子吗?你能发布你的GetFoo
和GetBar
声明以及它们的所有装饰吗?如果我将路由模板设置为api/miscellaneousapi/{action},其中任何一个方法现在都会产生500。我在每个函数中设置了一个断点,以查看它是否是该方法的结果,但两个函数都没有被命中。奇怪的是,在将更改恢复到路由模板时,每个函数现在都按预期工作。这对我来说很奇怪,因为我在发布这个问题之前清理并重新构建了解决方案,但它现在正在使用api/misc/{action}和GetFoo()和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);
}
}
}