开展网络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);
}
让我知道我搞砸了。我在这几个小时里一直在喋喋不休。我并不是声称自己特别擅长这一点。
答案 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..." });
}
}
}