C# 放入Web API将始终将“0”放入服务器

C# 放入Web API将始终将“0”放入服务器,c#,asp.net-web-api2,put,asp.net-web-api-routing,C#,Asp.net Web Api2,Put,Asp.net Web Api Routing,我从WebAPI开始,我离开Webdev已经有一段时间了,似乎没有人再关心SOAP了,但我在尝试使用SOAP时遇到了一些麻烦 我学习了一个在线教程,它对GET和DELETE都很有效。为了进行测试,我使用了Postman,因为它将从另一个服务调用,该服务也使用Postman进行测试。下面是GET的代码: 获取所有书籍: // GET: api/Books public IEnumerable<Book> Get() { return Library.Books; } 调试时,

我从WebAPI开始,我离开Webdev已经有一段时间了,似乎没有人再关心SOAP了,但我在尝试使用SOAP时遇到了一些麻烦

我学习了一个在线教程,它对GET和DELETE都很有效。为了进行测试,我使用了Postman,因为它将从另一个服务调用,该服务也使用Postman进行测试。下面是GET的代码:

获取所有书籍:

// GET: api/Books
public IEnumerable<Book> Get()
{
    return Library.Books;
}
调试时,如果按如下方式调用,参数地址将始终为零:http://localhost/api/Books/80,或任何其他int。换句话说,我对PUT的响应将始终为Value,不能为零。我尝试删除[FromBody]并将[HttpPut]属性添加到PUT方法中,但这只会让事情变得更糟。我知道这是相当新的,但正如我所说,我已经很久没有处理过web开发了。请告知。

您拥有的代码:

public IHttpActionResult Put([FromBody]int address)
{
}
希望您发送包含该号码的请求正文

在REST API中,PUT谓词通常以如下方式实现:

public IHttpActionResult Put(int id, [FromBody]Book book)
{
    //Update book with id == id with info from book
}
然后您可以向发送HTTP请求http://myapi.com/api/Books/23 使用请求主体,如:

{
    "title": "Updated title",
    "author": "Updated author"
}
编辑:

实际上,所有这些只是典型的模式。如果愿意,您可以执行基于属性的路由,并通过以下方式实现所需:

[RoutePrefix("api/Books")]
public class BooksController : ApiController
{
    [HttpPut]
    [Route("{address}")]
    public IHttpActionResult Put(int address)
    {

    }
}
在这种情况下,使用基于属性的路由来定义操作的路由。[RoutePrefix]这里定义了控制器中所有路由的起始位置。

您拥有的代码:

public IHttpActionResult Put([FromBody]int address)
{
}
希望您发送包含该号码的请求正文

在REST API中,PUT谓词通常以如下方式实现:

public IHttpActionResult Put(int id, [FromBody]Book book)
{
    //Update book with id == id with info from book
}
然后您可以向发送HTTP请求http://myapi.com/api/Books/23 使用请求主体,如:

{
    "title": "Updated title",
    "author": "Updated author"
}
编辑:

实际上,所有这些只是典型的模式。如果愿意,您可以执行基于属性的路由,并通过以下方式实现所需:

[RoutePrefix("api/Books")]
public class BooksController : ApiController
{
    [HttpPut]
    [Route("{address}")]
    public IHttpActionResult Put(int address)
    {

    }
}

在这种情况下,使用基于属性的路由来定义操作的路由。[RoutePrefix]这里定义了控制器中所有路由的起始位置。

PUT不是这样工作的。您放置了一个要更新的部分或全部资源,因此{Housenumber:42}。从属性中可以看到,整数是从主体中读取的。在这种情况下,您的请求主体应该是:一个名为address的整数,所以{address:42}。PUT不是这样工作的。您放置了一个要更新的部分或全部资源,因此{Housenumber:42}。从属性中可以看到,整数是从主体中读取的。在这种情况下,您的请求主体应该是:一个名为address的整数,所以{address:42}。啊,我明白了。在我的例子中,我实际上不需要请求主体,我只需要使用一个简单的URL获取服务器的地址,所以也许我应该添加另一个控制器,比如AddressController,并使用它的get方法来完成我需要的事情?这些书的地址逻辑和列表逻辑根本没有任何关系…编辑了我的帖子,如果你真的想这么做,你可以使用属性路由来覆盖默认的路由方案。好极了,就像我想的那样。自从WebForms还是一种东西以来,我就没有接触过web,所以当我必须完成一些事情时,我通常会迷路。非常感谢!啊,我明白了。在我的例子中,我实际上不需要请求主体,我只需要使用一个简单的URL获取服务器的地址,所以也许我应该添加另一个控制器,比如AddressController,并使用它的get方法来完成我需要的事情?这些书的地址逻辑和列表逻辑根本没有任何关系…编辑了我的帖子,如果你真的想这么做,你可以使用属性路由来覆盖默认的路由方案。好极了,就像我想的那样。自从WebForms还是一种东西以来,我就没有接触过web,所以当我必须完成一些事情时,我通常会迷路。非常感谢!