Web API Restful Service C#执行SQL查询

时间:2016-05-30 17:22:09

标签: c# rest

开展网络api宁静服务。

我有一张叫做测试的表。主键是自动增量。每行包含用户名和测试问题。这个数据库并没有真正优化,但它并不需要。

因为主键只是一个int来保持每一行唯一,所以有许多行具有重复的用户名。这很好。

我希望能够使用匹配的用户名返回所有行。

我希望能够通过网址获取请求:www.mywebsite.com/api/tests/{username}

Visual Studio中的默认控制器方法只能按主键搜索以返回一个唯一结果。

这就像我想要的那样,但它不起作用。 500错误。我也不熟悉调试,所以如果可能的话,请指出正确的方向,以便提供更多信息。

    // GET: api/Tests/robert
    [ResponseType(typeof(Test))]
    public async Task<IHttpActionResult> GetTest(string id)
    {
        //This is the default approach that just searches by primary key
        //Test test = await db.Tests.FindAsync(id);

        /*This is roughly what I want. Compiles, but doesn't work.*/

        var query = "SELECT* WHERE id=" + id;
        Test test =  db.Tests.SqlQuery(query, id);
        if (test == null)
        {
            return NotFound();
        }

        return Ok(test);
    }

让我知道我搞砸了。我在这几个小时里一直在喋喋不休。我并不是声称自己特别擅长这一点。

1 个答案:

答案 0 :(得分:1)

尝试像这样声明你的方法

[RoutePrefix("api")]
public class HisController : ApiController
{
    [HttpGet]
    public HttpResponseMessage Test(string name) {...}
}

另外,我建议您使用实体框架

[RoutePrefix("api")]
public class HisController : ApiController
{
    [HttpGet]
    public HttpResponseMessage Test(string name)
    {
        using (MyEntities bm = new MyEntities())
        {
            var usr = bm.Users.Where(u => u.Name == name ).ToList();

            if (usr.Count() > 0)
                return Request.CreateResponse(HttpStatusCode.OK, new
                {
                    Success = true
                        ,
                    Message = "Total users: " + usr.Count()
                        ,
                    Data = usr
                });

            return Request.CreateResponse(HttpStatusCode.NotFound, new { Success = false, Message = "No users found..." });
        }
    }
}