AngularJs和web api PUT无法正常工作
问题描述:
我想使用以下方法向Web api服务器发出PUT请求。AngularJs和web api PUT无法正常工作
角资源及要求:
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错误,用下面的标题:
Request URL:http://localhost:53889/api/book/1009
Request Method:PUT
Status Code:405 Method Not Allowed
...
我尝试了很多东西,我仍然无法找到问题。
而且整个控制器:
[授权] 公共类BookController的:ApiController { BusinessBundle _bundle =新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);
这意味着这本书是一个“复杂”的对象,但你是CS控制器部分接收本书作为一个字符串:
// PUT api/book/5
public void Put(int id, string book)
{
var a = book; // just for testing
}
首先,book
因为你发送一个完整的对象不能是一个字符串。在最坏的情况下,它可以是一个通用的对象类型,最好它应该是一个类正好是您从角度部分发送的相同成员。
所以我的建议是让一个类匹配您从javascript发送的参数book
。
在asp.net控制器上的ps:Put()
确实期望与上述评论中建议的内容相反。
+0
是的,那工作。非常感谢! 我有这样的一堂课。我习惯了stringify - 它,因此字符串参数。 – CrazyDog 2015-02-11 09:26:41
请添加控制器(所有cs) – knightsb 2015-02-11 08:57:22
@knightsb,完成。 – CrazyDog 2015-02-11 09:04:46
也许是因为'Put'需要两个参数,'id'和'book',你只发送一个参数? – 2015-02-11 09:07:38