Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Routing WebApi路由不适用于Post_Routing_Asp.net Web Api2_Asp.net Web Api Routing - Fatal编程技术网

Routing WebApi路由不适用于Post

Routing WebApi路由不适用于Post,routing,asp.net-web-api2,asp.net-web-api-routing,Routing,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 = "Em

我的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方法更改为following,它将开始工作

    [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/by attribute routing:

[Route("api/employee/post")]
[HttpPost]
public IHttpActionResult Post(Employee emp)
{
   ...
}
此处[Route]参数添加路由,称为属性路由。
您可以在此处找到参考资料

您很可能遇到了文章中描述的问题。在路由图中添加一个以上的参数,这是另一个问题。在我的例子中,它返回405错误方法not Allowed您尝试使用什么URL进行POST和GET?Api/employee/POST和Api/employee/GET在您的默认路由中,您正在设置action=“GET”,因此您无法使用传统路由机制调用POST Api。找到下面的答案,使用常规路由和属性路由使用api。