2013-02-21 77 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"; 
     } 
    }