C# Api控制器方法未调用

C# Api控制器方法未调用,c#,asp.net-web-api,C#,Asp.net Web Api,我有一个MVC项目,我添加了一个API控制器。在这个API控制器中,我在其中创建了方法。但是,当我试图用“”Url从postman或localhost调用这个API时,它会给出以下响应 { "Message": "No HTTP resource was found that matches the request URI 'http://localhost:10133/api/BedfordBrownstoneApi/GetAgentId?username=dgsdgsdgsd&p

我有一个MVC项目,我添加了一个API控制器。在这个API控制器中,我在其中创建了方法。但是,当我试图用“”Url从postman或localhost调用这个API时,它会给出以下响应

{
  "Message": "No HTTP resource was found that matches the request URI 'http://localhost:10133/api/BedfordBrownstoneApi/GetAgentId?username=dgsdgsdgsd&password=sdgsdgs'.",
  "MessageDetail": "No type was found that matches the controller named 'BedfordBrownstoneApi'."
}
我的API控制器如下所示

 public class BedfordBrownstoneApi : ApiController
    {
        // GET api/<controller>
        public int GetAgentId(string username,string password)
        {
            DataContext db = new DataContext();
            var data = db.Set<AgentLogin>().Where(a => a.UserName==username && a.Password==password).SingleOrDefault();
            return data.AgentId;
        }
}
}
  public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}",
                defaults: new { action = "GetAgentId" }
            );
        }
    }

在webapiconfig中的RouteComplete中添加Id参数。

请检查下面的问题,是否存在与您类似的问题

检查“Benoit74B”的已接受答案。它详细地解释了这个问题。实际问题是关于您正在传递的参数-

从控制器名称BedfordBrownstoneApi中删除“API”


您是否在api配置中启用了属性路由?config.maphttpAttribute路由()

对于当前路由,您应该通过查询字符串“”点击它,并用
[FromUri]

   [HttpGet]
   [Route("api/BedfordBrownstoneApi/GetAgentId/")]
   public int GetAgentId(string username,string password)
   {  
      //api stuff
   }
或通过路由参数点击api-

希望这对你有帮助。谢谢

有两个问题

  • 控制器名称-更改名称,在名称中添加控制器(BedfordBrownstoneApicController)
  • 您没有在Register函数中调用'config.maphttpAttribute()'
  • 请更新“WebApiConfig”中的“注册”函数,如下所示

    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();
    
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}",
            defaults: new { action = "GetAgentId" }
        );
    }
    

    我刚刚将代码改为following,现在它可以工作了

    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();
    
        config.Routes.MapHttpRoute(
            name: "BedfordBrownstoneApi",
            routeTemplate: "api/{controller}/{action}",
            defaults: new { action = "GetAgentId" }
        );
    }
    

    尝试此操作-从控制器名称中删除“Api”是否存在
    GlobalConfiguration.Configure(WebApiConfig.Register)在您的
    Global.asax
    文件中调用?您的api控制器名称中没有提到控制器,请选中此项将控制器类名更改为“BedfordBrownstoneApiController”@RK\u,因为我做了此更改并使用“”url调用,但问题相同
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();
    
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}",
            defaults: new { action = "GetAgentId" }
        );
    }
    
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();
    
        config.Routes.MapHttpRoute(
            name: "BedfordBrownstoneApi",
            routeTemplate: "api/{controller}/{action}",
            defaults: new { action = "GetAgentId" }
        );
    }