我得到404错误 - asp.net web api

时间:2014-05-28 09:44:14

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

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

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

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

我的第一个问题是我不知道如何从控制器访问方法。所以,我试图在没有它的情况下启动,看看它是否工作......当我运行它时,我将控制器添加到路径但是我收到错误。

我像这样跑:http://localhost:51041/ValuesController1

错误是这样的:

  应用程序中的服务器错误。

     

无法找到资源。

     

描述:HTTP 404.您要查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用。请查看>以下网址,并确保拼写正确。

     

请求的网址:/ ValuesController1

     

版本信息:Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.0.30319.18408

好的,现在我的代码:

控制器类:

    public class ValuesController1 : 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()
    {
        //return new BuzzMonitor.Web.MessageHandler.Search(...);
    }
}

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; }
}

所以,问题是:  1.我不知道如何从MessageHandler调用控制器中的搜索。  2.我收到错误消息,我不知道是因为我在控制器中没有我需要的所有东西,或者我需要设置一些配置......

我正在使用VS 2010。

感谢您的帮助,如果我的问题看起来很愚蠢,那就很抱歉......

2 个答案:

答案 0 :(得分:6)

将控制器类重命名为XXXController。例如,在这种情况下,将其命名为ValuesController。 WebAPI中的默认路由使用以下代码进行设置:

routes.MapRoute(
    "Default",                          //The name of this route.
    "api/{controller}/{action}/{id}",   //The url, note the prefix "api" is hard-coded.
    new {                               //The default values:
        controller = "Home",            //{controller} in URL defaults to Home (i.e. HomeController)
        action = "Index",               //{action} in URL defaults to Index method
        id = UrlParameter.Optional });  //The id part is optional

基于上述路线的示例网址为/api/Home/action/id。请注意,不使用该类的Controller后缀。因此,要将其映射到重命名的ValuesController,它将变为:

http://localhost:51041/api/Values/Get

答案 1 :(得分:3)

我认为您可能需要将ValuesController1更改为ValuesController

并使用

http://localhost:51041/api/Values