删除 http://localhost:54178/api/employees 405(方法不允许)
DELETE http://localhost:54178/api/employees 405 (Method Not Allowed)
我正在使用带有 C# WEB 的 React Client API。
REACT 函数
const deleteThisEmployee = empId => {
const formData = new FormData();
formData.append("id", empId);
fetch("http://localhost:54178/api/employee", {
method: "DELETE",
headers: {
Accept: "application/json",
"Content-Type": "application/json"
},
body: formData
})
.then(resp => resp.json())
.then(
result => {
// SUCCESS
}
// FAIL
);
};
WEB API 设置:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// add this to support JSON response and not XML
config.Formatters.JsonFormatter.SupportedMediaTypes
.Add(new MediaTypeHeaderValue("text/html"));
// Enable Cors
config.EnableCors(new EnableCorsAttribute("http://localhost:3000", "*", "*")); // React
}
}
控制器:
public class EmployeeController : ApiController
{
// .. Some other verbs
public String Delete(int id)
{
// TODO
Console.WriteLine("Got the Employee ID : " + id);
// Continue with delete logic
}
}
当我尝试删除一行时,我不断收到
DELETE http://localhost:54178/api/employee 405 (Method Not Allowed)
我检查了一些关于 SO 的问题,建议添加 WEB.Config
<remove name="WebDAV" />
<remove name="WebDAVModule" />
但是没有用。
知道是什么原因造成的吗?
这可能是几件事中的一件(或两件)。
- 该路线未自动注册为
DELETE
。您可以通过在 Delete
操作上方添加 using [HttpDelete]
来解决此问题。
- 它不是在寻找正文中的
id
。根据规范,DELETE
方法 may contain a body,但这并不意味着 ASP.NET 支持它。 (我不记得是否有)你可以尝试通过 URL 而不是在正文中传递它:
const deleteThisEmployee = empId => {
fetch("http://localhost:54178/api/employee?id=" + empId, {
method: "DELETE",
headers: {
Accept: "application/json",
"Content-Type": "application/json"
}
})
.then(resp => resp.json())
.then(
result => {
// SUCCESS
}
// FAIL
);
};
您应该告诉框架在控制器上寻找带有动作动词属性的删除方法,方法如下:
public class EmployeeController : ApiController
{
// .. Some other verbs
[HttpDelete] //fixed
public String Delete(int id)
{
// TODO
Console.WriteLine("Got the Employee ID : " + id);
// Continue with delete logic
}
}
我正在使用带有 C# WEB 的 React Client API。
REACT 函数
const deleteThisEmployee = empId => {
const formData = new FormData();
formData.append("id", empId);
fetch("http://localhost:54178/api/employee", {
method: "DELETE",
headers: {
Accept: "application/json",
"Content-Type": "application/json"
},
body: formData
})
.then(resp => resp.json())
.then(
result => {
// SUCCESS
}
// FAIL
);
};
WEB API 设置:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// add this to support JSON response and not XML
config.Formatters.JsonFormatter.SupportedMediaTypes
.Add(new MediaTypeHeaderValue("text/html"));
// Enable Cors
config.EnableCors(new EnableCorsAttribute("http://localhost:3000", "*", "*")); // React
}
}
控制器:
public class EmployeeController : ApiController
{
// .. Some other verbs
public String Delete(int id)
{
// TODO
Console.WriteLine("Got the Employee ID : " + id);
// Continue with delete logic
}
}
当我尝试删除一行时,我不断收到
DELETE http://localhost:54178/api/employee 405 (Method Not Allowed)
我检查了一些关于 SO 的问题,建议添加 WEB.Config
<remove name="WebDAV" />
<remove name="WebDAVModule" />
但是没有用。
知道是什么原因造成的吗?
这可能是几件事中的一件(或两件)。
- 该路线未自动注册为
DELETE
。您可以通过在Delete
操作上方添加 using[HttpDelete]
来解决此问题。 - 它不是在寻找正文中的
id
。根据规范,DELETE
方法 may contain a body,但这并不意味着 ASP.NET 支持它。 (我不记得是否有)你可以尝试通过 URL 而不是在正文中传递它:
const deleteThisEmployee = empId => {
fetch("http://localhost:54178/api/employee?id=" + empId, {
method: "DELETE",
headers: {
Accept: "application/json",
"Content-Type": "application/json"
}
})
.then(resp => resp.json())
.then(
result => {
// SUCCESS
}
// FAIL
);
};
您应该告诉框架在控制器上寻找带有动作动词属性的删除方法,方法如下:
public class EmployeeController : ApiController
{
// .. Some other verbs
[HttpDelete] //fixed
public String Delete(int id)
{
// TODO
Console.WriteLine("Got the Employee ID : " + id);
// Continue with delete logic
}
}