3

在 ASP.NET MVC 中,可以创建一个继承自 Controller 的 ControllerBase 类。然后你可以让你的所有控制器都从 ControllerBase 继承,如果你想让你的所有控制器都接收一个特定的属性,你所要做的就是将它添加到 ControllerBase 并设置好。

我正在尝试对 Web API 和 ApiController 做同样的事情。我创建了一个基础 ApiControllerBase 类,该类装饰有一个属性,然后我从我所有的 ApiControllers 上的 ApiControllerBase 继承。这似乎不起作用。

我确实有标准的 MVC 控制器,它们展示了它们从我的 BaseController 接收到的属性的行为。而且我可以用我的属性专门装饰一个 ApiController 类并且它可以工作,但是当我尝试使用 ApiControllerBase 类时我无法让它工作。

任何想法我可能做错了什么?

4

3 回答 3

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);
    }
}
于 2013-02-21T07:05:47.443 回答
3

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

System.Web.Http对于 Api 控制器,您必须使用命名空间中的属性,而System.Web.Mvc对于常规控制器,您必须使用命名空间中的属性。如果您创建自己的属性,请确保它们从正确的命名空间继承属性。

于 2013-02-21T07:17:12.950 回答
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";
        }
    }
于 2017-07-12T17:59:38.157 回答