c# MapHttpAttibuteRoutes 不能使用具有不同参数的相同操作?

标签 c# rest api

我是 c# 的新手,我被困在属性路由上。

现在我想创建一个 API 来获取、发布、放置和删除用户。

我不知道如何描述这个问题,我发现最熟悉的不是我的案例的正确答案。

How to use Route attribute to bind query string with web API?

[HttpGet]
public class UsersController : ApiController
{
    // GET /api/users
    [HttpGet]
    [Route("")]
    public IEnumerable<User> GetUsers()
    {
        return _context.Users.ToList();
    }

    [Route("api/users/{FirstName?}/{LastName?}")]
    public IEnumerable<User> GetByFirstName(string FirstName = null, string LastName = null)
    { 
        var users = Enumerable.Empty<User>();
        if (FirstName != null && LastName != null)
            users = _context.Users.Where(u => (u.FirstName == FirstName) && (u.LastName == LastName));
        else if (FirstName != null)
            users = _context.Users.Where(u => u.FirstName == FirstName);
        else if (LastName != null)
            users = _context.Users.Where(u => u.LastName == LastName);

        return users;
    }
}

这是我的 Controller ,下面是我的 WebApiConfig.cs 基本上我使用了 config.MapHttpAttributeRoutes();

    public static void Register(HttpConfiguration config)
    {
      // Web API configuration and services
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }

为什么我不能调用api http://localhost:50861/api/users?LastName=someName&FirstName=someName

非常感谢任何建议。或者这个问题的任何链接也很有帮助!谢谢

编辑:我刚刚更新了代码的另一部分。因为我用上面的api查询的时候,得到的是这个/api/users的结果。

最佳答案

像下面这样修改你的GetByFirstName

[HttpGet]
[Route("api/users/name")]
public IEnumerable<User> GetByFirstName(string FirstName = null, string LastName = null)
{ 
    var users = Enumerable.Empty<User>();
    if (FirstName != null && LastName != null)
        users = _context.Users.Where(u => (u.FirstName == FirstName) && (u.LastName == LastName));
    else if (FirstName != null)
        users = _context.Users.Where(u => u.FirstName == FirstName);
    else if (LastName != null)
        users = _context.Users.Where(u => u.LastName == LastName);

    return users;
}

然后你的网址会像

GET http://localhost:50822/api/users/name?FirstName=Will&LastName=abc

关于c# MapHttpAttibuteRoutes 不能使用具有不同参数的相同操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52214183/

相关文章:

ruby-on-rails - 使用 Redmine REST API 进行身份验证

c# - 在 Dispose 方法中关闭数据库连接是否正确?

http - get 请求中的参数可以有多长?

java - android直接使用mysql-connector连接mysql数据库

rest - LinkedIn - 获取访问 token 错误

java - 如何为 JSP 和 EJB3 网站创建 API

java - 使用 GSON 在 Java 中组织输出 JSON 响应

C# 日期时间数组

c# - 简化从表单获取数据的过程

c# - WCF 服务,我可以在浏览器中查看输出吗?