WebApi"请求的资源不支持http方法' DELETE"

时间:2017-06-14 09:18:26

标签: c# angularjs asp.net-web-api asp.net-web-api-routing

使用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}}

插入,更新和获取功能正常工作。提供解决方案以及为何仅删除

6 个答案:

答案 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)

如果您尝试执行PUTDELETE并且没有配置允许它的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],但是它起作用了。