这个问题可能是因为ASP.net MVC的默认路由处理不支持一些HTTP动词(例如PUT,DELETE)。你可以针对这些特定的HTTP动词添加自定义路由。
在你的ASP.net MVC应用中,打开Global.asax.cs文件并添加以下代码块:
protected void Application_Start()
{
// 省略其他代码...
// 添加新的路由规则,用于处理HTTP动词
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// 添加处理PUT动词的路由规则
routes.MapHttpRoute(
name: "CustomPut",
routeTemplate: "api/{controller}/{id}",
defaults: new { action = "Put" },
constraints: new { httpMethod = new HttpMethodConstraint("PUT") }
);
// 添加处理DELETE动词的路由规则
routes.MapHttpRoute(
name: "CustomDelete",
routeTemplate: "api/{controller}/{id}",
defaults: new { action = "Delete" },
constraints: new { httpMethod = new HttpMethodConstraint("DELETE") }
);
}
在上面的代码中,我们首先添加了默认的路由规则。然后,我们添加了针对PUT和DELETE动词的自定义路由规则,这些规则指定了"action"参数的值为"Put"和"Delete",并且使用"HttpMethodConstraint"约束来限制HTTP请求的动词类型。
现在,你可以在你的Controller类中添加Put和Delete方法,例如:
public class MyController : ApiController
{
// GET api/my/5
public string Get(int id)
{
return "value";
}
// POST api/my
public void Post([FromBody]string value)
{
}
// PUT api/my/5
public