ASP.net Web API 总是返回所有结果而不是需要的单个结果

3

嗨,我一直在尝试网上的各种方法来实现这个功能。我添加了一个mdf数据库,并创建了该数据库中表的模型。当我输入标准列表所有用户功能时,它可以完美地工作。

但是,根据下面的代码,我添加了一个根据多个网络来源的函数,它应该根据该表的内容返回单个用户。换句话说,/api/users将返回所有用户,但/api/users/123也将返回所有用户,而按照我的理解,它只应该返回用户123。

请告诉我我做错了什么,任何帮助将不胜感激。

 using System;
 using System.Collections.Generic;
 using System.Data;
 using System.Data.Entity;
 using System.Data.Entity.Infrastructure;
 using System.Linq;
 using System.Net;
 using System.Net.Http;
 using System.Threading.Tasks;
 using System.Web.Http;
 using System.Web.Http.Description;
 using APPAPI.Models;


 namespace APPAPI.Controllers
 {
 public class UsersController : ApiController
 {
    private APPDATAENT _context;
    public UsersController()
    {
        _context = new APPDATAENT();
    }
    //get api/users
    public IEnumerable<User> GetUsers()
    {
        return _context.Users.ToList();
    }
    public User GetMember(string member)
    {
        var membership = _context.Users.SingleOrDefault(c => c.UserName == 
 member);
        if (membership == null)
            throw new HttpResponseException(HttpStatusCode.NotFound);
        return membership;
    }

我尝试将字符串成员声明为int,但是我得到了错误,尽管用户名表只包含数字,我认为UserName列设置为Char而不是int等。 - Lee
哦,你错误地调用了“GetMember”方法。你的URL是“/api/users/123”,实际上触发了“GetUsers”方法而不是“GetMember”。如果只想要获取单个用户,你还需要为“GetMember”设置路由,比如[HttpGet("api/users/{id}")] - er-sho
1个回答

2

约定路由的默认模板通常是:

"api/{controller}/{id}"

请注意 id 参数名称。
你的操作被定义为:
public User GetMember(string member);

"member"是问题所在。它与该操作的路由模板不匹配,因此默认返回“GetUsers()”操作作为模板中的"id"参数通常是可选的。

重构操作。

[HttpGet]
public IHttpActionResult GetMember(string id) {
    var membership = _context.Users.SingleOrDefault(c => c.UserName == id);
    if (membership == null)
        return  NotFound();
    return Ok(membership);
}

@Lee,很高兴能帮到你。欢迎来到 Stack Overflow。 - Nkosi
我可以问另一个问题吗?如果我只想解析ID并获取请求的特定结果,该怎么办?我对API工作非常陌生,虽然我已经做了很多研究,但没有教程显示如何仅获取所请求数据的一列 :) - Lee
@Lee,你可以从返回的对象中提取所需数据并构建所需的响应。在你的例子中,你返回了整个对象,但你也可以很容易地只返回所需的值。 - Nkosi
明白了,再次感谢。 - Lee
不错的 @Nkosi - ArunPratap

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接