C# WebAPI2:[DELETE]方法在代码中不允许,但在Fiddler中它正在工作

C# WebAPI2:[DELETE]方法在代码中不允许,但在Fiddler中它正在工作,c#,httpclient,webapi2,C#,Httpclient,Webapi2,我在Fiddler中测试了我的WebAPI2(DELETE),它工作正常,但在我的代码中有一个错误,方法是不允许的 这是我的代码: public async Task<bool> deleteUser(int id) { string URI = "http://api.danubeco.com/api/userapps"; using (var client = new HttpClient()) {

我在Fiddler中测试了我的WebAPI2(DELETE),它工作正常,但在我的代码中有一个错误,方法是不允许的

这是我的代码:

    public async Task<bool> deleteUser(int id)
    {
        string URI = "http://api.danubeco.com/api/userapps";

        using (var client = new HttpClient())
        {   
            var response = await client.DeleteAsync(String.Format("{0}/{1}", URI, id));

            var myobject = await response.Content.ReadAsStringAsync();

            return Convert.ToBoolean(myobject);
        }            
    }

尝试添加如下内容:

        config.Routes.MapHttpRoute(
            name: "YourControllerApi",
            routeTemplate: "api/{controller}",
            defaults: new { controller = "YourControler", action = "Delete", id = RouteParameter.Optional }
        );

当然,您需要将“YourController”替换为控制器类的名称,并且您可能需要调整routeTemplate(这一个假设您将调用您的URL/api/YourController)。

我真的不知道这是否是一个好的实践,但我修改了这样的代码

    // DELETE: api/userapps/5   
    [HttpGet]
    [Route("api/userapps/deluser/{id}")]
    [ActionName("deluser")]
    [ResponseType(typeof(bool))]
    public bool Deleteuserapp(int id)
    {
        userapp userapp = db.userapps.Find(id);
        if (userapp == null)
        {
            return false;
        }

        db.userapps.Remove(userapp);
        db.SaveChanges();

        return true;
    }



并使用GetAsync而不是DeleteAsync。

您是否捕获了由此代码创建的请求,并将其与您在fiddler中创建的请求进行比较?我打赌有一些不同之处:)@在Fiddler中对Gorilla进行编码我使用相同的方法成功删除了一个用户,但在代码响应中不允许使用该方法。我理解,但您是否查看了请求的标题,我怀疑您缺少它想要的标题。您是否使用基于属性的路由?如果是,您是否有[HttpDelete]属性?确保您的WebApiConfig.cs中有一个包含action=“Delete”的路由“对于您的控制器,因为您似乎没有使用基于属性的路由。我所知道的唯一一个定义允许的HTTP谓词的位置是在system.WebServer/handlers下的Web.config中,它定义了要使用的ExtensionlessUrlHandler。但是这些应该在您创建WebApi项目时设置。
    // DELETE: api/userapps/5   
    [HttpGet]
    [Route("api/userapps/deluser/{id}")]
    [ActionName("deluser")]
    [ResponseType(typeof(bool))]
    public bool Deleteuserapp(int id)
    {
        userapp userapp = db.userapps.Find(id);
        if (userapp == null)
        {
            return false;
        }

        db.userapps.Remove(userapp);
        db.SaveChanges();

        return true;
    }
    var response = await client.GetAsync(String.Format("{0}/{1}", URI,