Angularjs VS Community 2015中angular和WebAPI的PUT/DELETE给出405错误

Angularjs VS Community 2015中angular和WebAPI的PUT/DELETE给出405错误,angularjs,iis,asp.net-web-api,vs-community-edition,Angularjs,Iis,Asp.net Web Api,Vs Community Edition,我的angular和WebAPI中的PUT和DELETE请求中出现405(找不到方法)错误。GET和POST工作正常。我已经在“SO”上检查了所有存在此类错误的解决方案,但它不起作用。我已经在我的WebConfig中添加了所需的处理程序(带有PUT/DELETE动词),更新了IIS EXpress的applicationhost.config,还卸载了WebDAV模块,但问题仍然存在 这是我的控制器代码: [RoutePrefix("api/BlogPost")] public class Bl

我的angular和WebAPI中的PUT和DELETE请求中出现405(找不到方法)错误。GET和POST工作正常。我已经在“SO”上检查了所有存在此类错误的解决方案,但它不起作用。我已经在我的WebConfig中添加了所需的处理程序(带有PUT/DELETE动词),更新了IIS EXpress的applicationhost.config,还卸载了WebDAV模块,但问题仍然存在

这是我的控制器代码:

[RoutePrefix("api/BlogPost")]
public class BlogPostController : ApiController
{
    // GET: api/BlogPost
    public IQueryable<BlogPostModel> GetblogPostTb()
    {
        return db.blogPostTb;
    }

    // GET: api/BlogPost/5
    [ResponseType(typeof(BlogPostModel))]
    public IHttpActionResult GetBlogPostModel(int id)
    {
        BlogPostModel blogPostModel = db.blogPostTb.Find(id);
        if (blogPostModel == null)
        {
            return NotFound();
        }

        return Ok(blogPostModel);
    }

    // PUT: api/BlogPost/5
    [ResponseType(typeof(void))]
    public IHttpActionResult PutBlogPostModel(int id, BlogPostModel blogPostModel)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        if (id != blogPostModel.ID)
        {
            return BadRequest();
        }

        db.Entry(blogPostModel).State = EntityState.Modified;

        try
        {
            db.SaveChanges();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!BlogPostModelExists(id))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }

        return StatusCode(HttpStatusCode.NoContent);
    }

    [ResponseType(typeof(BlogPostModel))]
    public IHttpActionResult DeleteBlogPostModel(int id)
    {
        BlogPostModel blogPostModel = db.blogPostTb.Find(id);
        if (blogPostModel == null)
        {
            return NotFound();
        }

        db.blogPostTb.Remove(blogPostModel);
        db.SaveChanges();

        return Ok(blogPostModel);
    }
}

仅供参考,我正在Visual Studio Community 2015中与WebAPI2、IIS Express 10合作。我不确定这是否是IIS EXpress 10或社区版VS的错误。

这似乎是WebAPI属性路由的已知问题。 这里使用如下的DELETE和PUT方法更新AcceptVerbs和Route属性:

[ResponseType(typeof(void))]
[Route("{id:int}")]
[AcceptVerbs("PUT")]
public IHttpActionResult PutBlogPostModel(int id, BlogPostModel blogPostModel)
{
 // Your code
}
并删除为:

[ResponseType(typeof(BlogPostModel))]
[Route("{id:int}")]
[AcceptVerbs("DELETE")]
public IHttpActionResult DeleteBlogPostModel(int id)
{
  // Your Code
}

也可以对GET方法使用AcceptVerbs属性,因为这三个(GET、PUT、DELETE)具有相同的URL结构来调用它们的方法。

这与VS Studio Community 2015无关。这就是WebAPI的实现方式谢谢。我从过去两天就被困在里面了。这对我来说很有效。再次感谢。
[ResponseType(typeof(BlogPostModel))]
[Route("{id:int}")]
[AcceptVerbs("DELETE")]
public IHttpActionResult DeleteBlogPostModel(int id)
{
  // Your Code
}