Skip to main content
 首页 » 编程设计

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

2024年02月04日29insus

我是 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