1

我創建了一個新的MVC項目,並勾選了API框。如何爲API創建MVC區域?

不過,我打算創造出許多API函數,我真的不希望,填補了主控制器文件夾,所以,我認爲這將是一個地區一個良好的使用。

所以,我創建了一個名爲API的區域,但是,無論我做什麼,我似乎無法訪問任何API頁面。

只是爲了測試,我創建了一個叫做test在API方面的另一個控制器,並且,我可以訪問如預期所做的一切。

我是從MVC2/3直接來的,然後過了幾年......我有點失去聯繫,我相信這可能與/App_Start/WebApiConfig.cs/Global.asax文件有關,但是,我嘗試過編輯他們以各種方式沒有任何運氣。

有誰知道發生了什麼,我需要做些什麼來獲得從某個區域工作的API功能?

回答

2

您不需要爲Api控制器創建一個區域,但您的Api控制器必須從ApiController派生出來才能被拾取。不要創建一個區域,只需將文件夾內的控制器組織起來,只要控制器遵循約定,他們將被WebApi拾取。我們建議您使用Attribute Based Routing來代替路線。然後,對於每個「區域」,您可以創建一個基本API控制器,並在該類上粘貼一個`[RoutePrefix(「api/areaName」)]屬性 - 然後對於該區域中的每個控制器,您只需從該基本控制器派生。

這裏爲「用戶」 API控制器一個簡單的例子。下面你的例子就可以使用以下網址:

記住要啓用基於屬性的路由在WebApiConfig類。

WebApiConfig.cs

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

UsersApiController.cs

[RoutePrefix("api/users")] 
public class UsersApiController : ApiController 
{ 
     List<User> _users = new List<User> { new User("Foo", "Bar"), new User("Bar", "Foo") }; 

     [Route("")] 
     public IHttpActionResult Get() 
     { 
      var result = _users; 

      return Ok(result); 
     } 

     [Route("{id:guid}")] 
     public IHttpActionResult Get(Guid id) 
     { 
      var result = _users.FirstOrDefault(q => q.Id == id); 

      if (result == null) 
       return NotFound(); 

      return Ok(result); 
     }   

     [Route("")] 
     public IHttpActionResult Post([FromBody]PostModel model) 
     { 
      // Process the input model 
      var user = new User(model.FirstName, model.LastName); 

      // Save user to database 
      _users.Add(user);   

      return Created<User>(Request.RequestUri + user.Id.ToString(), user); 
     } 

     public class PostModel 
     { 
      public string FirstName { get; set; } 
      public string LastName { get; set; } 
     } 

     public class User 
     { 
      public User(string firstName, string LastName) 
      { 
       Id = Guid.NewGuid(); 
       FirstName = firstName; 
       LastName = lastName; 
      } 

      public Guid Id { get; private set; } 
      public string FirstName { get; private set; } 
      public string LastName { get; private set; }   
     } 
}