웹 API로 시작하고 있습니다. (잠시 웹 개발자가 없었기 때문에 아무도 SOAP을 신경 쓰지 않는 것 같습니다.) 그러나 몇 가지 문제가 발생했습니다. PUT하려고합니다.웹 API의 PUT은 항상 서버에 "0"을 넣습니다.
나는 온라인 자습서를 따랐으며 GET 및 DELETE에 잘 작동합니다. 테스트를 위해 우체부에서 테스트 한 다른 서비스에서 호출되므로 우체부를 사용하고 있습니다.
모든 책을 가져 오기 :
// GET: api/Books
public IEnumerable<Book> Get()
{
return Library.Books;
}
이 ID에 의해 책을 가져 오기 :
// DELETE: api/Books/<int>
public IHttpActionResult Delete(int id)
{
Book book = Library.Books.FirstOrDefault(l => l.ID == id);
if (book != null)
{
Library.Books.Remove(book);
return ResponseMessage(Request.CreateResponse(HttpStatusCode.OK));
}
else
return ResponseMessage(Request.CreateResponse<string>(HttpStatusCode.NotFound, "Book not found."));
}
그들 모두 잘 실행 :
// GET: api/Books/<int>
public IHttpActionResult Get(int id)
{
Book book = Library.Books.FirstOrDefault(l => l.ID == id);
if (book != null)
return ResponseMessage(Request.CreateResponse<Book>(HttpStatusCode.OK, book));
else
return ResponseMessage(Request.CreateResponse<string>(HttpStatusCode.NotFound, "Book not found."));
}
이 ID에 의해 책을 삭제 여기 GET에 대한 코드는 객체 목록을 반환해야하므로 내 목적을 달성 할 수 있습니다.
BTW, http://localhost/api/Books/1
작품은 꽤 잘 GET 또는 DELETE를 선택하면
을 (난 정말 지금 우체부의 내부 동작에 들어갈 필요가 없습니다)하지만 난 단지 보낼 필요로 나는 PUT 방식을 변경했습니다 이 서비스에 대한 일부 int (주소). 다음은 테스트 코드는 다음과 같습니다과 같은 불리는 경우
// PUT: api/Books/<int>
public IHttpActionResult Put([FromBody]int address)
{
if (address == 0)
return ResponseMessage(Request.CreateResponse<string>(HttpStatusCode.BadRequest, "Value cannot be zero"));
else
return ResponseMessage(Request.CreateResponse(HttpStatusCode.OK));
}
디버깅하는 동안, 매개 변수 "주소"항상 0이됩니다 : http://localhost/api/Books/80
또는 다른 지능. 다시 말해, PUT에 대한 나의 반응은 항상 "값은 0이 될 수 없습니다"입니다. 나는 [FromBody]
을 제거하고 [HttpPut]
속성을 PUT 메소드에 추가하려고했지만 상황이 악화됩니다. 나는 그것이 꽤 새롭다는 것을 안다. 그러나 내가 말했던 것처럼, 나는 나이에 웹 dev를 다루지 않았다. 제발 조언.
PUT 작동 방식이 아닙니다. '{ "Housenumber": "42"}'그래서 업데이트 할 리소스의 일부 또는 전체를 푸시합니다. 속성에서 볼 수 있듯이 정수는 본문에서 읽습니다. 이 경우 귀하의 요청 본문은 바로 다음과 같아야합니다 : 주소라는 이름의 정수,'{address : 42}'. – CodeCaster