我的 WebApiConfig 有以下路由
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { controller = "Employee", action = "Get", id = RouteParameter.Optional }
);
Post WebApi 方法具有以下签名
[HttpPost]
public IHttpActionResult Post(Employee emp)
{
.....
}
当我尝试调用此方法时,我收到“方法不允许”
如果我将 Post 方法更改为以下,它就会开始工作
[Route("api/employee/post")]
[HttpPost]
public IHttpActionResult Post(Employee emp)
{
...
}
我不明白问题出在哪里。我希望它能够与属性路由一起使用。任何人都可以建议这里有什么问题吗? GET 和 Post 路由是否会混淆?
最佳答案
设置您的默认路线,如下所示:
config.MapHttpAttributeRoutes(); //this enables attribute routing
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
); //this route is for conventional routing
现在您可以通过传统路由调用以下 API,例如 http://{siteurl}/api/employee/。
[HttpPost]
public IHttpActionResult Post(Employee emp)
{
...
}
现在您可以通过属性路由调用以下 API,例如 http://{siteurl}/api/employee/post/:
[Route("api/employee/post")]
[HttpPost]
public IHttpActionResult Post(Employee emp)
{
...
}
这里的[Route]参数添加了路由,称为属性路由。 您可以在这里找到引用Routing and Action Selection
关于routes - WebApi 路由不适用于 Post,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30855647/