在VS Community 2015中,使用angular和WebAPI时,PUT/DELETE会产生405错误



我在我的angular和WebAPI的PUT和DELETE请求中得到405(方法未找到)错误。GET和POST工作正常。我已经检查了所有的解决方案与这种类型的错误'SO',但它没有工作。我在我的WebConfig中添加了所需的处理程序(带有PUT/DELETE动词),更新了applicationhost。配置 IIS EXpress并卸载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);
    }
}

下面是客户端代码:

var updateBlogPost = function (id, blogPost) {
        return $http.put(blogPostsUrl+"/"+id, blogPost)
            .then(function (response) {
                return response;
            })

只是为了信息,我正在Visual Studio Community 2015中使用WebAPI2, IIS Express 10。我不确定这是IIS EXpress 10还是VS.的社区版本的错误

这似乎是WebAPI属性路由的已知问题。这里用DELETE和PUT方法更新AcceptVerbsRoute属性,如下所示:

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

和Delete as:

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

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

相关内容

  • 没有找到相关文章

最新更新