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) 
{ 
} 
+0

请添加控制器(所有cs) – knightsb 2015-02-11 08:57:22

+0

@knightsb,完成。 – CrazyDog 2015-02-11 09:04:46

+0

也许是因为'Put'需要两个参数,'id'和'book',你只发送一个参数? – 2015-02-11 09:07:38

东西令我奇怪的,可以在.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