[asp.net]AngularJs 和 web api 把不工作

发布时间: 2017/3/26 5:49:00
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想要的 PUT 请求到 web api 服务器,使用下面的代码。

角的资源和要求︰

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
...

尝试了很多的东西,和找不到这一问题。

和整个控制器︰

[授权] 公共类创建应用程序模板︰ 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)
{
}

解决方法 1:

东西我觉得奇怪,在.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 不是一个字符串,因为你发送一个完整的对象。最坏的情况可以是泛型对象类型,充其量它应该是一类具有完全相同的成员,你将从角的一部分发送。

所以我的建议是使一个类来匹配 book 你从 javascript 发送的参数。

ps: Put() 对 asp.net 控制器并期望第二次违反所指出的上述评论。

赞助商