AngularJs 和网络 api PUT 不工作
AngularJs and web api PUT not working
我想使用以下内容向 Web api 服务器发出 PUT 请求。
Angular 资源和请求:
Books: $resource('/api/book/:id',
{id: '@id'},
{
'update' : {method: 'PUT'}
})
...
$id = book.BookId
BookLibraryAPI.Books.update({id: $id},book);
Web API 控制器:
public void Put(int id, string book)
{
}
但是我得到 405 错误,如下 headers:
Request URL:http://localhost:53889/api/book/1009
Request Method:PUT
Status Code:405 Method Not Allowed
...
我试了很多东西,还是找不到问题。
以及整个控制器:
[授权]
public class 图书控制器:ApiController
{
BusinessBundle _bundle = new BusinessBundle();
// GET api/book
public IEnumerable<Book> Get()
{
return _bundle.BookLogic.GetAll();
}
// GET api/book/5
public Book Get(int id)
{
return _bundle.BookLogic.GetBook(id);
}
// POST api/book
public void Post([FromBody]string value)
{
}
// PUT api/book/5
public void Put(int id, string book)
{
var a = book; // just for testing
}
// DELETE api/values/5
public void Delete(int id)
{
}
让我感到奇怪的是,在 .js 中,您正在执行以下操作:
$id = book.BookId
BookLibraryAPI.Books.update({id: $id},book);
这意味着这本书是一个 'complex' 对象,但在 cs 控制器部分,您收到的是一个字符串形式的书:
// PUT api/book/5
public void Put(int id, string book)
{
var a = book; // just for testing
}
首先,book
不能是字符串,因为您发送的是完整对象。在最坏的情况下,它可以是一个通用对象类型,最好的情况下它应该是一个 class, 与您从 angular 部分发送的成员完全相同。
所以我的建议是制作一个 class 来匹配您从 javascript.
发送的 book
参数
ps:asp.net 控制器上的 Put()
确实期望第二个与上述评论中建议的相反。
我想使用以下内容向 Web api 服务器发出 PUT 请求。
Angular 资源和请求:
Books: $resource('/api/book/:id',
{id: '@id'},
{
'update' : {method: 'PUT'}
})
...
$id = book.BookId
BookLibraryAPI.Books.update({id: $id},book);
Web API 控制器:
public void Put(int id, string book)
{
}
但是我得到 405 错误,如下 headers:
Request URL:http://localhost:53889/api/book/1009
Request Method:PUT
Status Code:405 Method Not Allowed
...
我试了很多东西,还是找不到问题。
以及整个控制器:
[授权] public class 图书控制器:ApiController { BusinessBundle _bundle = new BusinessBundle();
// GET api/book
public IEnumerable<Book> Get()
{
return _bundle.BookLogic.GetAll();
}
// GET api/book/5
public Book Get(int id)
{
return _bundle.BookLogic.GetBook(id);
}
// POST api/book
public void Post([FromBody]string value)
{
}
// PUT api/book/5
public void Put(int id, string book)
{
var a = book; // just for testing
}
// DELETE api/values/5
public void Delete(int id)
{
}
让我感到奇怪的是,在 .js 中,您正在执行以下操作:
$id = book.BookId
BookLibraryAPI.Books.update({id: $id},book);
这意味着这本书是一个 'complex' 对象,但在 cs 控制器部分,您收到的是一个字符串形式的书:
// PUT api/book/5
public void Put(int id, string book)
{
var a = book; // just for testing
}
首先,book
不能是字符串,因为您发送的是完整对象。在最坏的情况下,它可以是一个通用对象类型,最好的情况下它应该是一个 class, 与您从 angular 部分发送的成员完全相同。
所以我的建议是制作一个 class 来匹配您从 javascript.
发送的book
参数
ps:asp.net 控制器上的 Put()
确实期望第二个与上述评论中建议的相反。