如何从控制器调用方法 - asp.net web api

时间:2014-05-28 11:48:02

标签: c# asp.net .net asp.net-web-api

我的任务是创建服务(使用asp.net api)并将其用于android应用程序。

我从未做过这样的事情所以我在开始时遇到了问题。 :(

首先,我创建了几个类的类库。其次,我创建了asp.net Web应用程序并将类库引入其中。

我的问题是我不知道如何从控制器访问方法。

代码如下:

控制器类:

  public class ValuesController : ApiController
{
    // GET api/<controller>
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET api/<controller>/5
    public string Get(int id)
    {
        return "value";
    }

    // POST api/<controller>
    public void Post([FromBody]string value)
    {
    }

    // PUT api/<controller>/5
    public void Put(int id, [FromBody]string value)
    {
    }

    // DELETE api/<controller>/5
    public void Delete(int id)
    {


    }
    public List<BuzzMonitor.Web.Message> Search()
    {
        MessageHandler mh = new MessageHandler();

        List<BuzzMonitor.Web.Message> messages = null;

        messages = mh.Search(string text, DateTime dateFrom, DateTime dateTo, List<int> themeIds, List<int> sourceIds);

        return messages;
    }


}

MessageHandler类:

 public class MessageHandler
{
    private List<Message> _dummyMessages = new List<Message>()
        {
            new Message(){
                MessageId = 1,
                CreatedDate = new DateTime(2014, 5, 27),
                Text = "Srpska vodoprivreda...",
                Autor = "Marko Markovic",
                Source = "Twitter"

            },
            new Message(){
                MessageId = 2,
                CreatedDate = new DateTime(2014, 5, 27),
                Text = "Aerodrom Beograd...",
                Autor = "Zoran Zoric",
                Source = "B92"

            }
        };

    public List<Message> GetLatestMessages(int nrMessagesToReturn)
    {
        List<Message> retVal;

        retVal = this._dummyMessages.GetRange(0, nrMessagesToReturn);

        return retVal;
    }

    public List<Message> Search(string text, DateTime dateFrom, DateTime dateTo, List<int> themeIds, List<int> sourceIds, int pageIndex, int pageSize)
    {
        List<Message> retVal;

        retVal = this.Search(text, dateFrom, dateTo, themeIds, sourceIds);

        if (retVal != null && retVal.Count > 0)
        {
            retVal = retVal.GetRange(pageIndex * pageSize, pageSize);
        }

        return retVal;
    }

    public List<Message> Search(string text, DateTime dateFrom, DateTime dateTo, List<int> themeIds, List<int> sourceIds)
    {
        List<Message> retVal = null;

        retVal = this._dummyMessages.Where(m => m.Text.IndexOf(text, StringComparison.OrdinalIgnoreCase) > -1 &&
            m.CreatedDate >= dateFrom &&
            m.CreatedDate < dateTo &&
            (themeIds == null || themeIds.Count == 0 || (themeIds.Contains(m.ThemeId))) &&
            (sourceIds == null || sourceIds.Count == 0 || (sourceIds.Contains(m.SourceId)))).ToList<Message>();

        return retVal;
    }


}

邮件类:

    public class Message
{
    public int MessageId { get; set; }

    public DateTime CreatedDate { get; set; }

    public string Text { get; set; }

    public string Autor { get; set; }

    public string Source { get; set; }

    public int ThemeId { get; set; }

    public int SourceId { get; set; }
}

好的,还有一个,我想访问MessageHandler类,它是从控制器搜索的方法,但我不知道如何,因为当我键入MessageHandler并放入点我不能再输入任何东西时:(

谢谢大家的帮助!

1 个答案:

答案 0 :(得分:1)

您的问题是,当您调用方法时,您正在指示您的参数类型。您只在定义方法时指明类型:

messages = mh.Search(string text, DateTime dateFrom, DateTime dateTo, List<int> themeIds, List<int> sourceIds);

应该是:

messages = mh.Search(text, dateFrom, dateTo, themeIds, sourceIds);

但是,您仍然存在一个问题,即这些变量不存在。他们来自哪里?我认为你想将它们传递给Web API动作方法。