【发布时间】:2018-01-01 03:20:09
【问题描述】:
我是 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] "api/Users/SignUp" 和 "api/Users" 可以映射到 SignUp 方法,但 "api/Users/SignIn" 总是不成功。
这里是关于我如何在 POSTMAN 中尝试 API
请指出我哪里出错了..
【问题讨论】:
-
你打电话给
config.Routes.MapAttributeRoutes了吗? -
是的,这样其他 RestFul 方法就可以正常工作了。
-
装饰你的方法,如
[HttpPost][Route("SignIn")],它们偏离约定并删除除最后一次调用MapHttpRoute之外的所有方法 -
那么 "api/Users/SignIn" 总是映射到 SignUp 方法。如果我删除 SignUp 方法,它会返回一条消息“您请求的资源不支持 Http Post 方法。”
-
你需要装饰它们。另外,发帖到
api/Users是什么意思?如果这意味着创建一个用户,那么创建一个执行该操作的方法并将其命名为Post
标签: c# asp.net-web-api asp.net-mvc-routing asp.net-web-api-routing