gpt4 book ai didi

angularjs - PUT/DELETE 在 VS Community 2015 中使用 Angular 和 WebAPI 给出 ​​405 错误

转载 作者:行者123 更新时间:2023-12-02 03:22:58 25 4
gpt4 key购买 nike

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

这是我的 Controller 代码:

[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
}

并删除为:

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

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

关于angularjs - PUT/DELETE 在 VS Community 2015 中使用 Angular 和 WebAPI 给出 ​​405 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32003334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com