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

时间:2017-07-26 01:56:01

标签: c# asp.net-web-api asp.net-mvc-routing asp.net-web-api-routing

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

  

现在我在我的路线中添加了一个动作参数,   我认为我的知识出了问题,   这条路线不起作用。

这是我的控制器,主要问题是我只需要映射 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] &#34; api / Users / SignUp&#34; &#34; api / Users&#34; 可以映射到SignUp方法,但&#34; api / Users / SignIn&#34; 始终不会成功。

关于我如何在POSTMAN中尝试API

POST MAN

请指出我哪里出错..

1 个答案:

答案 0 :(得分:3)

如果使用属性路由,则需要区分这两条路由。一旦使用路线,控制器本身就是全部或全部。你不能将它们与基于惯例的路线混合在一起。

审核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) {
        //...
    }
}