2014-09-29 129 views
0

我正在開發ASP.NET MVC應用程序。我正在嘗試創建一個基本的API。我通過右鍵單擊控制器,添加 - >控制器,然後選擇「Web API 2 Controller - Empty」,創建了我的第一個Web API控制器。在控制器代碼中,我有以下幾點:無法訪問ASP.NET MVC Web Api端點

namespace MyProject.Controllers 
{ 
    public class MyApiController : ApiController 
    { 
     public IHttpActionResult Get() 
     { 
      var results = new[] 
      { 
       new { ResultId = 1, ResultName = "Bill" }, 
       new { ResultId = 2, ResultName = "Ted" } 
      }; 
      return Ok(results); 
     } 
    } 
} 

當我運行應用程序時,我請在瀏覽器的地址欄中http://localhost:61549/api/myApi。不幸的是,我得到了404。我只是想創建一個API端點,它返回一組硬編碼的JSON對象。我需要這個來測試一些客戶端JavaScript。我究竟做錯了什麼?

這裏是我如何路由註冊: WebApiConfig.cs

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

RouteConfig.cs

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 
} 
+0

我想你可以只返回IEnumerable,然後返回匿名對象。 – 2014-09-29 14:39:23

+0

@ThomasKoelle IEnumerable是什麼?我認爲IEnumerable需要一個類型。也許我誤解了一些東西。然而,我不認爲你可以說IEnumerable 2014-09-29 14:55:52

+0

你的api終點其實是'/ api/myapi/get' - 如果你想使用'/ api/myapi',那麼你需要一個'Index()'動作 – Darren 2014-09-29 16:40:52

回答

1

確保您有可能在Global.asax Application_Start()方法中調用WebApiConfig註冊。就像:

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 
    WebApiConfig.Register(GlobalConfiguration.Configuration); 
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
    RouteConfig.RegisterRoutes(RouteTable.Routes); 
    BundleConfig.RegisterBundles(BundleTable.Bundles); 
} 
1

你沒有在呼叫的末尾添加方法名。試試這個:

http://localhost:61549/api/myapi/get 
+0

我試過了。不幸的是,這並沒有奏效。 – 2014-09-29 14:55:03

0

試試這個辦法

namespace MyProject.Controllers 
{ 
     public class MyApiController : ApiController 
     { 
      public IHttpActionResult Get() 
      { 
       var results = new List<ResultModel> 
       { 
        new ResultModel() {ResultId = 1, ResultName = "Bill"}, 
        new ResultModel() {ResultId = 2, ResultName = "Ted"} 
       }; 
       return Ok(results); 
      } 

     } 

     public class ResultModel 
     { 
      public int ResultId { get; set; } 
      public string ResultName { get; set; } 
     } 
} 


Api: http://localhost:61549/api/MyApi/get 

希望這有助於。

+0

不幸的是,這並沒有奏效。我仍然得到了404.我更新了這篇文章,幷包含了我的路由配置。我注意到我的WebApiConfig.cs中的Register方法沒有被調用。應該是?如果是這樣,我怎樣才能調用它? – 2014-09-29 16:37:47