2014-05-20 2 views
0

C# web api를 사용하여 정보를 업데이트하는 웹 API를 만들었습니다.웹 API put 메서드가 계속 반환됩니다. 404

// Update 
// URI PUT + api/Gender/id 
[HttpPut] 
public IHttpActionResult PutGender(int id, [FromBody] Gender g) 
{ 
    if (!ModelState.IsValid) 
    { 
     return BadRequest(ModelState); 
    } 

    var query = (from gen in genders 
       where gen.Id == id 
       select gen).FirstOrDefault(); 

    if (query == null) 
    { 
     return BadRequest("wrong"); 
    } 

    query.Description = g.Description; 
    query.LanguageId = g.LanguageId; 
    query.InternalCode = g.InternalCode; 
    query.isActive = g.isActive; 
    query.UpdatedAt = DateTime.Now; 

    return StatusCode(HttpStatusCode.OK); 
} 

내가 피들러를 통해 테스트입니다이 난 것은 실행 방법은 다음과 같습니다

URL http://localhost:49625/API/PutGender 액션 PUT 요청 헤더

Content-Type: application/json 
User-Agent: Fiddler 
Host: localhost:49625 
Content-Length: 86 

RequestBody

{"Id":1,"Description":"Undecided","LanguageId":null,"InternalCode":0,"isActive":false} 
+1

'id' 매개 변수는 본문과 달리 URL에 전달 될 것으로 예상됩니까? 'http : // localhost : 49625/API/PutGender/1'도 404를 제공합니까? – DavidG

+0

네, 그래도 404를 제공합니다, 나는 당신에게 알리기 위해 Visual Studio 2013을 가지고 있습니다. – Jseb

+0

어떻게 전화 하시겠습니까? 즉, 클라이언트 응용 프로그램은 무엇입니까? – DavidG

답변

2

의 URL을 이름이 누락되었습니다. e를 제어합니다. 예를 들어 컨트롤러가 GenderController이라면 URL은 http://localhost:49625/API/Gender/PutGender

0

이되어야합니다. 또한 라우트 구성을 확인하십시오. 기본 경로 구성을 사용하는 경우 :

config.Routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

당신의 URL (PutGender)의 "액션 부분"을 지정할 필요가 없습니다 "http://myhost/api/gender/1 PUT"잘해야한다. 또한 메서드 이름을 Put ...이라 명명 할 경우 메서드 서명에서 [HttpPut] 특성을 생략 할 수 있습니다.

관련 문제