【问题标题】:Api Controller Method not callsApi 控制器方法不调用
【发布时间】:2017-10-21 15:31:27
【问题描述】:

我有 MVC 项目,我添加了一个 API 控制器。在这个 API 控制器中我已经在其中创建了方法。但是当我尝试使用“http://localhost:10133/api/BedfordBrownstoneApi/GetAgentId?username=dgsdgsdgsd&password=sdgsdgs”Url 从邮递员或本地主机调用这个 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;
        }
}
}

我的 WebApiConfig 类如下所示。

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

【问题讨论】:

标签: c# asp.net-web-api


【解决方案1】:

检查下面的问题是否与您的问题相似。

检查“Benoit74B”的已接受答案。它清楚地详细解释了问题。实际问题与您传递的参数有关 -

"No HTTP resource was found that matches the request URI" here?

【讨论】:

    【解决方案2】:
    【解决方案3】:
     config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{action}/{id}",
                    defaults: new { action = "GetAgentId",id = RouteParameter.Optional }
                );
    

    在 webapiconfig 的 routeTemplete 中添加 Id 参数。

    【讨论】:

      【解决方案4】:

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

      使用您当前的路线,您应该通过查询字符串“http://localhost:10133/api/BedfordBrownstoneApi/GetAgentId?username=dgsdgsdgsd&password=sdgsdgs”点击它并使用[FromUri]装饰参数

         [HttpGet]
         [Route("api/BedfordBrownstoneApi/GetAgentId/")]
         public int GetAgentId(string username,string password)
         {  
            //api stuff
         }
      

      或通过路由参数访问 api - http://localhost:10133/api/BedfordBrownstoneApi/GetAgentId/yourusername/yourpassword

         [HttpGet]
         [Route("api/BedfordBrownstoneApi/GetAgentId/{username}/{password}")]
         public int GetAgentId(string username,string password)
         {  
            //api stuff
         }
      

      希望这对您有所帮助。谢谢!!

      【讨论】:

        【解决方案5】:

        有两个问题。

        1. 控制器名称 - 更改名称,在名称中添加控制器 (BedfordBrownstoneApiController)。
        2. 您错过了在注册函数中调用“config.MapHttpAttributeRoutes()”。

        请在“WebApiConfig”中更新您的“注册”功能,如下所示。

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

        【讨论】:

          【解决方案6】:

          我刚刚将我的代码更改为以下代码,现在它可以工作了。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-12-15
            • 2016-01-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多