C# Can';t映射行动路线,ASP.NET核心Web API
我正在从事Web API项目,遇到以下问题: 我尝试使用以下Url()调用名为“GetUserBy”的操作方法,但在浏览器中收到的结果如下所示:C# Can';t映射行动路线,ASP.NET核心Web API,c#,asp.net-core-webapi,C#,Asp.net Core Webapi,我正在从事Web API项目,遇到以下问题: 我尝试使用以下Url()调用名为“GetUserBy”的操作方法,但在浏览器中收到的结果如下所示: {"id":["The value 'GetUserBy' is not valid."]} 下面是我的UsersController: [Route("api/[controller]")] [ApiController] public class UsersController : ControllerBase { // GET: ap
{"id":["The value 'GetUserBy' is not valid."]}
下面是我的UsersController:
[Route("api/[controller]")]
[ApiController]
public class UsersController : ControllerBase
{
// GET: api/Users
[HttpGet]
public IEnumerable<User> GetUsers()
{
//this works
//code removed for simplicity
}
//GET: api/Users/5
[HttpGet("{id}")]
public async Task<IActionResult> GetUser([FromRoute] int id)
{
//this works too
}
[HttpGet("Users/GetUserBy")]
public async Task<IActionResult> GetUserBy([FromQuery]string username, [FromQuery]string password)
{
//this doesn't work
}
}
我也访问了以下网页,但我找不到答案。
您遇到了路由冲突
api/Users/GetUserBy
符合这条路线
//GET: api/Users/5
[HttpGet("{id}")]
public async Task<IActionResult> GetUser([FromRoute] int id)
{
//this works too
}
当前的GetUserBy
操作将Users/GetUserBy
作为其路由模板,在给定控制器上的当前api/[controller]
路由模板的情况下,该模板将解析为api/Users/Users/GetUserBy
考虑使用动作标记来获得所需的行为
下面是完成的代码以及上面建议的更改
[Route("api/[controller]")]
[ApiController]
public class UsersController : ControllerBase {
// GET: api/Users
[HttpGet]
public IEnumerable<User> GetUsers() {
//...
}
//GET: api/Users/5
[HttpGet("{id:int}")]
public async Task<IActionResult> GetUser([FromRoute] int id) {
//...
}
//GET: api/Users/GetUserBy
[HttpGet("[action]")]
public async Task<IActionResult> GetUserBy([FromQuery]string username, [FromQuery]string password) {
//...
}
}
[路由(“api/[控制器]”)]
[ApiController]
公共类UsersController:ControllerBase{
//获取:api/用户
[HttpGet]
公共IEnumerable GetUsers(){
//...
}
//获取:api/Users/5
[HttpGet(“{id:int}”)]
公共异步任务GetUser([FromRoute]int id){
//...
}
//获取:api/Users/GetUserBy
[HttpGet(“[action]”)
公共异步任务GetUserBy([FromQuery]字符串用户名,[FromQuery]字符串密码){
//...
}
}
参考尝试从以下位置更改标签:
[HttpGet("Users/GetUserBy")]
为此:
[HttpGet("GetUserBy")]
您已经将其路由到控制器用户尝试将您的标记从以下位置更改为:
[HttpGet(“Users/GetUserBy”)]
,[HttpGet(“GetUserBy”)]
,您已经将其路由到控制器名为Users的位置。我已经尝试了很多次,但都没有成功:)@Ryan Wilson,谢谢。我知道一些简单的事情是……不客气。祝你过得愉快!:)操作方法周围的括号给了我InvalidOperationException错误和双括号-与我遇到的问题相同..@A.M请查看此处的文档InvalidOperationException:属性路由信息出现以下错误:错误1:操作:'ddddddservice.userscoontroller.GetUserBy(ddddddddService)'错误:处理模板'api/[controller]/[Users]/[GetUserBy]'时,找不到令牌'Users'的替换值。可用令牌:“操作,控制器”。若要在路由或约束中使用'['或']'作为文本字符串,请改用'['或']]'。
[HttpGet("Users/GetUserBy")]
[HttpGet("GetUserBy")]