当前位置: 首页 > 知识库问答 >
问题:

所有ASP.NET Web API控制器返回404

桓高澹
2023-03-14

我正在尝试让API控制器在ASP.NET MVC4 web应用程序中工作。但是,每一个请求都得到一个404,我很难理解。:/

我从项目模板中定义了标准API控制器路由,如下所示:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

在global.asax中调用注册:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    // Register API routes
    WebApiConfig.Register(GlobalConfiguration.Configuration);

    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

    RouteConfig.RegisterRoutes(RouteTable.Routes);
}

我有这样一个基本的API控制器:

namespace Website.Controllers
{
    public class FavoritesController : ApiController
    {       
        // GET api/<controller>
        public IEnumerable<string> Get()
        {
            return new [] { "first", "second" };
        }

        // PUT api/<controller>/5
        public void Put(int id)
        {

        }

        // DELETE api/<controller>/5
        public void Delete(int id)
        {

        }
    }
}

现在,当我浏览到localhost:59900/api/favorites时,我希望调用Get方法,但我得到了一个404状态代码和以下响应:

<Error>
   <Message>
       No HTTP resource was found that matches the request URI 'http://localhost:59900/api/Favorites'.
   </Message>
   <MessageDetail>
      No type was found that matches the controller named 'Favorites'.
   </MessageDetail>
</Error>

如果你能帮上忙我会很感激的,我有点发疯了。:)谢谢!

共有3个答案

申屠裕
2023-03-14

我一直在研究一个类似的问题,我花了很长时间才找到这个问题。这并不是这篇文章的解决方案,但希望添加这一内容可以为一些人节省一些时间,当他们在搜索为什么他们的控制器可能会出现404错误时,他们试图找到问题。

基本上,我在类名末尾拼错了“controller”。就这么简单!

桂志诚
2023-03-14

基本上也有同样的问题,在我的情况下,通过补充:

<modules runAllManagedModulesForAllRequests="true" />

<system.webServer>

</system.webServer>

web.config的部分

柏高洁
2023-03-14

我遇到的一件事是在global.asax文件中以错误的顺序注册了配置,例如:

正确顺序:

AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);

null

AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
WebApiConfig.Register(GlobalConfiguration.Configuration);

只是说,这是我的问题,改变顺序是显而易见的,但有时被忽视,会造成很多挫折。

 类似资料:
  • 你好,我是拉威尔的新手,也许这对你们来说太傻了。在laravel 8中,路由web。php我创建了一条如下的路线: 我想问的是,我们也可以从回调视图返回控制器吗?所以在路由 /editprofile中,第二个参数不是'App\Http\Controller\SiteController@edit_profile',而是一个回调函数,如路由'/home'。 但是它返回错误哈哈。假设我不想用__con

  • 我试图创建一个入口控制器,它指向我通过Nodeport公开的服务。 以下是入口控制器的yaml文件(摘自https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/):

  • 我不能将完整的对象序列化到Java API Rest中。响应方法中没有返回某些属性。 我有一个这样的对象: 这是我在RestController中的方法的一个示例: 这是我的回报,没有这个人的财产: 我无法得到完整的物体

  • 目标是打印标签的当前文本。标签在整个程序中不断变化,使用当前的方法,我只能检索标签的初始化值。 我用来检索控制器实例的内容:

  • 如果可以从Spring返回,我很好奇 这样做可以吗?我试过了,Spring返回的不是流的值。 我应该继续返回

  • 我试图从xml配置转移到java配置。应用程序启动时不会出现任何错误,但是当内容不同时,jsp返回$END$。 我相信我在某个地方犯了一些愚蠢的错误,没有抛出异常 注意:使用xml配置时,一切正常 配置类 初始值设定项类 控制器