使用WebApi angularjs项目并尝试删除函数 `
$http({
method: "delete",
url: '/api/Country/DeleteCountry/',
dataType: "json",
data: { cntryId: cntryId }
}).then(function (response) {});
js功能
{"Message":"The requested resource does not support http method 'DELETE'."}
这里我得到了异常
{{1}}
插入,更新和获取功能正常工作。提供解决方案以及为何仅删除
答案 0 :(得分:3)
使用Route
属性装饰你的方法(我看到这让我对web API中的路由行为有了更多的控制权),并以这种格式将你的数据参数作为构造函数args传递:[HttpDelete, Route("{cntryId}")
[HttpDelete, Route("{cntryId}")]
public String DeleteCountry(string cntryId)
{
//....
}
在角度控制器中你可以这样做:
$http.delete('/api/Country/' + cntryId).then(function (response) {
//if you're waiting some response
})
答案 1 :(得分:1)
不是webapi问题,更多的是您的查询格式。
消息说does not support http method 'DELETE'
,因为webapi删除方法期望id作为参数。并且路线具有以下格式routeTemplate: "api/{controller}/{id}",
要解决您的问题,请尝试使用fiddler拦截您的请求,并确保将您的删除请求发送为'/api/Country/DeleteCountry/'+cntryId,
答案 2 :(得分:0)
选项1:
$http({
method: "delete",
url: '/api/Country/Country?cntryId=' + cntryId,
}).then(function (response) {});
选项2:
public String DeleteDeleteCountry([FromBody]string cntryId)
{
if (cntryId != null)
{
return repoCountry.DeleteCountry(Convert.ToInt32(cntryId));
}
else
{
return "0";
}
}
最佳选择:
API
[Route("{countryId}")]
public IHttpActionResult Delete(int countryId)
{
try
{
repoCountry.DeleteCountry(countryId);
}
catch (RepoException ex)
{
if (ex == notfound)
this.NotFound();
if (ex == cantdelete)
this.Confict();
this.InternalServerError(ex.message);
}
return this.Ok();
}
的Javascript
$http({
method: "delete",
url: '/api/country/' + cntryId,
}).then(function (response) {});
答案 3 :(得分:0)
假设您没有更改默认路由。如果您未能为webAPI中的操作声明[HttpDelete]属性,则会发生相同的错误。请尝试以下
[HttpDelete]
public IHttpActionResult Delete(int id)
{
}
答案 4 :(得分:0)
如果您尝试执行PUT
或DELETE
并且没有配置允许它的API,通常会发生这种情况。
这篇文章向您展示如何解决此405错误并使其正常工作。
在Web API项目的web.config
文件中编辑ExtensionlessUrlHandler-Integrated-4.0行的最简单方法
<system.webServer>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
答案 5 :(得分:0)
我遇到了同样的问题,并最终解决了它。这是简单而愚蠢的解决方案。
早期代码
public String DeleteCountry(string cntryId)
更改代码
public String DeleteCountry(int id)
所以只使用'int id'而不是'cntryId'。我没有在方法名称前使用[HttpDelete],但是它起作用了。