routes - WebApi 路由不适用于 Post

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

我的 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/

相关文章:

javascript - modelbinder IsMultiPartContent 始终返回 false。如何用 react 上传文件

c# - ASP.NET CORE Web API - 删除操作未触发(404 未找到)

c# - WebApi 版本控制单个 Controller

javascript - SAPUI5 路由 - controlId 和 targetControl 之间的区别

javascript - 从路由 emberjs 中删除动态段信息

ruby - Sinatra 动态模板名称

asp.net-web-api - 属性路由不适用于字典

c# - 如何使用 ASP.NET Web API 处理 Javascript 后端的 JWT client_id

python - 使用 Flask 蓝图,如果指定了子域,如何修复 url_for 不被破坏?

c# - 多个 Controller 上的属性路由匹配请求的 url