【问题标题】:WebApi Routing not working for PostWebApi 路由不适用于 Post
【发布时间】:2015-06-15 21:56:25
【问题描述】:

我的 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 路由会混淆吗?

【问题讨论】:

  • 您很可能遇到过brockallen.com/2012/07/12/… 文章中描述的问题。向您的路由图添加一个如该处所述的参数。
  • 这是一个不同的问题。在我的情况下,它返回 405 错误方法不允许
  • 您尝试使用什么 URL 来执行 POST 和 GET ?
  • Api/employee/post 和 Api/employee/get
  • 在您的默认路由中,您设置了 action = "get",因此您无法使用常规路由机制调用 post api。在下面找到答案以使用常规和属性路由来处理您的 api。

标签: routing asp.net-web-api2 asp.net-web-api-routing


【解决方案1】:

如下设置你的默认路由:

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

【讨论】:

    猜你喜欢
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    相关资源
    最近更新 更多