【问题标题】:No HTTP resource was found that matches the request URI, No action was found on the controller that matches the request未找到与请求 URI 匹配的 HTTP 资源,未在控制器上找到与请求匹配的操作
【发布时间】:2015-05-11 09:22:06
【问题描述】:

我已经回答了几个问题,但还没有找到我的问题的答案。

我的 ajax 请求

$.ajax({     
 url: "api/Company/GetQuarters/" + STARTQ+ '/' + CURRQ,
 type: "GET",
 ...
});

我的 api

    [HttpGet]
    public HttpResponseMessage GetQuarters(int start,int end)
    {
     ...
    }

路线

 routes.MapHttpRoute(
        "GetQuarters",
        "Company/GetQuarters/{start}/{end}",
        defaults: new { start = RouteParameter.Optional, end = RouteParameter.Optional });

我不断收到错误消息

错误信息

在控制器“公司”上找不到与 请求。

我该如何解决?

编辑:项目结构为Test->API->CompanyAPI.cs;测试->Global.asax 在 Global.asax 中

 void RegisterRoutes(RouteCollection routes)
    {
      ....

     routes.MapHttpRoute(
            "API",
            "api/{controller}/{action}/{id}/",
            defaults:new { id = RouteParameter.Optional, Action="GET, POST"  });
    routes.MapHttpRoute(
            "GetQuarters",
            "Company/GetQuarters/{start}/{end}",
            defaults: new { start = RouteParameter.Optional, end=RouteParameter.Optional });
   ....

    }

控制器:

public class CompanyController : ApiController
{
 [HttpGet]
    public HttpResponseMessage GetQuarters(int start,int end)
    {
     ...
    }
}

【问题讨论】:

  • 尝试从您的 Ajax 调用中删除“api/”前缀。我假设您显示的操作是在公司控制器中?
  • yes sellotape,public HttpResponseMessage GetQuarters(int start,int end) 在 CompanyController 中。当我删除“api/”时,我收到错误消息:找不到提供控制器名称的路由以匹配请求 URI 'localhost/test/Company/GetQuarters/56/64
  • 您能否编辑问题以添加其余的路由配置(以及可能影响此的配置)以及控制器的属性和声明。还对您的项目结构发表评论;例如你的 MVC 和 Web API 控制器在同一个项目中吗?什么版本的 MVC / Web API?

标签: ajax api url-routing


【解决方案1】:

我怀疑只是你的 GetQuarters 路由注册没有以“api/”开头,即

routes.MapHttpRoute(
        "GetQuarters",
        "api/Company/GetQuarters/{start}/{end}",
        defaults: new { start = RouteParameter.Optional, end=RouteParameter.Optional });

【讨论】:

  • jamesk,我也试过了,不,这不是问题,我仍然得到“在控制器'公司'上找不到与请求匹配的操作”
  • 如果您在 GetQuarters 之后移动默认路由?它通常会捕获任何您的自定义路线不匹配的东西,目前它是第一个匹配的东西。
  • 您是否针对“RouteTable.Routes”而不是“GlobalConfiguration.Configuration.Routes”注册 Web api 路由?
  • jamesk, RegisterRoutes(RouteTable.Routes);
  • 好的,将注册交换为适当的 WebApi 配置方法。根据您的 WebApi 版本,使用“GlobalConfiguration.Configure(WebApi.Register)”(see) 或“WebApi.Regiser(GlobalConfiguration.Config)”。
猜你喜欢
  • 2017-09-25
  • 2015-08-13
  • 1970-01-01
  • 2017-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-02
相关资源
最近更新 更多