2017-05-22 144 views
-1

我有MVC項目,我已經添加了一個API控制器。在這個API控制器中我已經創建了方法。但是當我試圖從郵遞員或本地主機調用這個API的「http://localhost:10133/api/BedfordBrownstoneApi/GetAgentId?username=dgsdgsdgsd&password=sdgsdgs」給出以下回應。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" } 
      ); 
     } 
    } 
+0

試試這個 - 從控制器名稱中刪除'Api'http:// localhost:10133/api/BedfordBrownstone/GetAgentId?username = dgsdgsdgsd&password = sdgsdgs –

+0

在你的Global.asax文件中是否有'GlobalConfiguration.Configure(WebApiConfig.Register);'調用? – Alisson

+1

您沒有在您的api控制器名稱中提及Controller,請查看http://stackoverflow.com/questions/11384552/getting-no-type-was-found-that-matches-the-controller-named-sampleslashbaseser –

回答

0
config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{action}/{id}", 
       defaults: new { action = "GetAgentId",id = RouteParameter.Optional } 
      ); 

在webapiconfig加入您的routeTemplete Id參數。

0

是否啓用屬性在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 
    } 

希望這可以幫助你。謝謝!!

0

有兩個問題。

  1. 控制器名稱 - 更改名稱,在名稱(BedfordBrownstoneApiController)中添加Controller。
  2. 你錯過了在Register函數中調用'config.MapHttpAttributeRoutes()'。

請在'WebApiConfig'中更新您的'註冊'功能,如下所示。

public static void Register(HttpConfiguration config) 
{ 
    config.MapHttpAttributeRoutes(); 

    config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{action}", 
     defaults: new { action = "GetAgentId" } 
    ); 
} 
0

我只是將我的代碼更改爲以下和現在它的工作。

public static void Register(HttpConfiguration config) 
{ 
    config.MapHttpAttributeRoutes(); 

    config.Routes.MapHttpRoute(
     name: "BedfordBrownstoneApi", 
     routeTemplate: "api/{controller}/{action}", 
     defaults: new { action = "GetAgentId" } 
    ); 
} 
相關問題