Asp.net mvc 4 未调用web api中的POST方法。

Asp.net mvc 4 未调用web api中的POST方法。,asp.net-mvc-4,http-post,asp.net-web-api,Asp.net Mvc 4,Http Post,Asp.net Web Api,我试图从web api(在MVC4项目中创建)调用POST方法,但无法访问它 我的web api配置如下: config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new {action=RouteParameter.Optional, id = Rou

我试图从web api(在MVC4项目中创建)调用POST方法,但无法访问它

我的web api配置如下:

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new {action=RouteParameter.Optional, id = RouteParameter.Optional }
        );
我正在尝试调用以下方法

    [HttpPost]
    public bool Delete(Int64 Id)
    {           
        return true;
    }
正在调用所有GET方法

当我试图访问它时,浏览器显示

“不允许使用http 405方法”

当看到这样的反应时

{“Message”:“请求的资源不支持http方法'GET'。”

请帮帮我

当我试图访问它时,浏览器显示

嗯,这很正常。浏览器发送GET请求。您的方法只能通过POST请求调用

以下是示例HTTP请求的外观:

POST /someresource/delete/123 HTTP/1.1
Host: www.example.com
Content-Type: application/json
Content-Length: 0
Connection: close
您可以在Fiddler中尝试该请求,或者编写一个示例HTTP客户端来发送POST请求

啊,顺便问一下,为什么不坚持标准的RESTful约定:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);
以及你的行动:

public bool Delete(Int64 Id)
{           
    return true;
}
并援引:

DELETE /someresource/123 HTTP/1.1
Host: www.example.com
Content-Type: application/json
Content-Length: 0
Connection: close
请注意,标准RESTful约定规定不应在路由中使用操作名称。HTTP动词决定要调用的操作。因此,您的操作应该根据HTTP动词命名。在您的示例中,您希望删除具有指定id的某些资源,因此您的控制器操作应命名为delete(与当前一样),并且应可通过delete HTTP动词访问

当我试图访问它时,浏览器显示

嗯,这很正常。浏览器发送GET请求。您的方法只能通过POST请求调用

以下是示例HTTP请求的外观:

POST /someresource/delete/123 HTTP/1.1
Host: www.example.com
Content-Type: application/json
Content-Length: 0
Connection: close
您可以在Fiddler中尝试该请求,或者编写一个示例HTTP客户端来发送POST请求

啊,顺便问一下,为什么不坚持标准的RESTful约定:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);
以及你的行动:

public bool Delete(Int64 Id)
{           
    return true;
}
并援引:

DELETE /someresource/123 HTTP/1.1
Host: www.example.com
Content-Type: application/json
Content-Length: 0
Connection: close
请注意,标准RESTful约定规定不应在路由中使用操作名称。HTTP动词决定要调用的操作。因此,您的操作应该根据HTTP动词命名。在您的示例中,您希望删除具有指定id的某些资源,因此您的控制器操作应命名为delete(与当前一样),并且应可通过delete HTTP动词访问