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