Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 仅为某些WebAPI方法获取404_C#_Asp.net Web Api - Fatal编程技术网

C# 仅为某些WebAPI方法获取404

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

我今天刚刚在我的一个WebAPI控制器中添加了两个方法,用于GET。我在控制器中已经有一个这样的方法,它工作得非常好,所以我知道从这个意义上讲,它不可能是一个路由问题

以下是我的webapiconfig.cs:

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);
    }
  }
}