Skip to main content
 首页 » 编程设计

c#之ASP.NET Web API 操作路由不起作用

2024年02月27日32飞鱼

我是 Web API 的新手,我知道 Web API 和 MVC 之间的区别之一 是web API 使用HTTP 方法来选择按约定调用哪个方法。

Now I added an action parameter into my route, I think there's something went wrong to my knowledge, the route doesn't work.

这是我的 Controller ,主要问题是我只需要映射 SignIn 和 SignUp 方法。 (其他 RestFul 方法工作正常。)

public class UsersController : ApiController 
{ 
    private Model1Container db = new Model1Container(); 
 
    public IEnumerable<User> GetUsers() 
    { 
        return db.UserSet; 
    } 
 
    [HttpPost] 
    public IHttpActionResult SignIn(string account, string password) 
    { 
        ... 
    } 
 
    [HttpPost] 
    public IHttpActionResult SignUp(User user) 
    { 
        ... 
    } 
 
    public IHttpActionResult GetUser(int id) 
    { 
        ... 
    } 
 
    public IHttpActionResult PutUser(int id, User user) 
    { 
        ... 
    } 
 
    public IHttpActionResult DeleteUser(int id) 
    { 
        ... 
    } 
 
} 

我什至尝试过为这两种方法在我的前两条路线上添加直接约束,

config.Routes.MapHttpRoute( 
            name: "UsersSignIn", 
            routeTemplate: "api/Users/SignIn", 
            defaults: new { controller = "Users", action = "SignIn" } 
        ); 
 
config.Routes.MapHttpRoute( 
            name: "UsersSignUp", 
            routeTemplate: "api/Users/SignUp", 
            defaults: new { controller = "Users", action = "SignUp" } 
        ); 
 
config.Routes.MapHttpRoute( 
            name: "RestFulUser", 
            routeTemplate: "api/{controller}/{id}", 
            defaults: new { id = RouteParameter.Optional }, 
            constraints: new { controller = "Users" } 
        ); 

但结果是 [POST] "api/Users/SignUp" 和 "api/Users" 可以映射到 SignUp 方法,但 "api/Users/SignIn" 总是不成功。

下面是关于我如何在 POSTMAN 中试用 API

请指出我错在哪里..

请您参考如下方法:

如果使用属性路由,您需要区分这两个路由。同样,一旦使用路由,它在 Controller 本身上就是全有或全无。您不能将它们与基于约定的路由混合使用。

评论 Attribute Routing in ASP.NET Web API 2

[RoutePrefix("api/Users")] 
public class UsersController : ApiController { 
    private Model1Container db = new Model1Container(); 
 
    [HttpGet] 
    [Route("")] //Matches GET api/Users 
    public IEnumerable<User> GetUsers() { 
        return db.UserSet; 
    } 
 
    [HttpPost] 
    [Route("SignIn")] //Matches POST api/Users/SignIn 
    public IHttpActionResult SignIn(string account, string password) { 
        //... 
    } 
 
    [HttpPost] 
    [Route("SignUp")] //Matches POST api/Users/SignUp 
    public IHttpActionResult SignUp([FromBody]User user) { 
        //... 
    } 
 
    [HttpGet] 
    [Route("{id:int}")] //Matches GET api/Users/5 
    public IHttpActionResult GetUser(int id) { 
        //... 
    } 
 
    [HttpPut] 
    [Route("{id:int}")] //Matches PUT api/Users/5 
    public IHttpActionResult PutUser(int id,[FromBody]User user) { 
        //... 
    } 
 
    [HttpDelete] 
    [Route("{id:int}")] //Matches DELETE api/Users/5 
    public IHttpActionResult DeleteUser(int id) { 
        //... 
    } 
}