2013-02-21 80 views
2

在ASP.NET MVC中,可以創建一個從Controller繼承的ControllerBase類。然後你可以讓所有的控制器都繼承自ControllerBase,如果你想讓所有的控制器都接收到一個特定的屬性,你所要做的就是將它添加到ControllerBase中,然後設置好。ASP.NET Web API - 使用基類

我試圖用Web API和ApiController做同樣的事情。我創建了一個基本的ApiControllerBase類,該類使用一個屬性修飾,然後在所有的ApiController上從ApiControllerBase繼承。這似乎沒有工作。

我確實有標準的MVC控制器展示他們從我的BaseController接收到的屬性的行爲。我可以用我的屬性來特別裝飾一個ApiController類,它可以工作,但是當我嘗試使用ApiControllerBase類時,我無法使它工作。

任何想法我可能在做什麼?

+3

請您詳細說明*這似乎沒有工作。*?提供您的試用代碼也會很棒 – 2013-02-21 06:19:57

+0

請記住,屬性繼承是雙向的 - 一個屬性必須標記爲可繼承;以及尋找屬性的代碼必須指定它想要看到繼承的屬性。你是否控制了這兩個方面? – 2013-02-21 07:10:41

回答

3

請注意,Api控制器不能使用MVC屬性,反之亦然。

對於常規控制器,必須使用來自ApiControllers的System.Web.Http命名空間的屬性和來自System.Web.Mvc名稱空間的屬性。如果您創建自己的屬性,請確保它們從正確的名稱空間繼承屬性。

3

我可以確認下面的作品。沒有一些發佈的代碼,我不確定你的問題到底是什麼。

public class BaseApiController : ApiController 
{ 
    public readonly KiaEntities Db = KiaEntities.Get(); 
} 

public class ColorsController : BaseApiController 
{ 
    // GET api/colors 
    [Queryable] 
    public IEnumerable<ColorViewModel> Get() 
    { 
     var colors = Db.Colors; 
     return Mapper.Map<IEnumerable<ColorViewModel>>(colors); 
    } 
} 
0

我相信下面的代碼會幫助你。

public class HomeController : BaseController 
{ 
    public IHttpActionResult Get() 
    { 
      base.InitialiseUserState(); 
      var info = Info; 
       return Ok(info); 
     } 
} 


public class BaseController : ApiController 
    { 
     public string Info { get; set; } 
     public void InitialiseUserState() 
     { 
      Info = "test"; 
     } 
    }