我正在尝试从web api(在MVC4项目中创建)调用POST方法,但无法访问它。
我的网络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方法”
当看到响应时,它显示为,
{“消息”:“请求的资源不支持http方法'GET'。”}
请帮帮我。
答案 0 :(得分:4)
当我尝试访问它时,浏览器正在显示
嗯,这很正常。浏览器发送GET请求。您的方法只能通过POST请求调用。
以下是HTTP请求示例的样子:
POST /someresource/delete/123 HTTP/1.1
Host: www.example.com
Content-Type: application/json
Content-Length: 0
Connection: close
您可以在Fiddler中尝试请求,也可以编写一个发送POST请求的示例HTTP客户端。
啊,顺便说一下,为什么不坚持标准的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谓词进行相应命名。在您的示例中,您希望删除具有指定标识的某些资源,因此您的控制器操作应命名为Delete(因为它当前),并且应该可以通过DELETE HTTP谓词访问它。