2015-01-21 3 views
1

을 던집니다. Asp.Net MVC4 웹 API 프레임 워크를 기반으로 REST API를 만들려고합니다. GET 요청은 정상적으로 작동합니다. 다른 모든 동사는 서버에서 무시됩니다.MVC4 API 게시 동사가 http 404

"No action was found on the controller 'Track' that matches the request." 

예제 오류가 트랙 컨트롤러에서 비록 다른 모든 컨트롤러가 같은 문제가 있습니다 : 그냥 다음 말했다.

[HttpPost] 
    public Object Index(string token, string juke, string track) 
    { 
    } 

I'v는 JSON 오브젝트과 같이 사용하여 시도 :

컨트롤러 트랙의 방법은 내가 전화를 시도하고있다

{ "track": "0000", "juke": "0000" } 

내가 사용하려고 "정상적인"방법 :

track=0000&juke=0000 

위의 예에서 '0000'은 실제 ID의 대문자입니다.

public static void Register(HttpConfiguration config) 
    { 
     config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); 
     config.Routes.MapHttpRoute(
      name: "DefaultIndexBackEnd", 
      routeTemplate: "back-end/{controller}/{token}", 
      defaults: new { action = "Index", token = RouteParameter.Optional } 
     ); 
     config.Routes.MapHttpRoute(
      name: "DefaultBackEnd", 
      routeTemplate: "back-end/{controller}/{action}/{token}", 
      defaults: new { token = RouteParameter.Optional } 
     ); 
    } 
+0

사용중인 url은 무엇입니까? –

+0

"/ back-end/Track/0000"을 사용 중입니다. 다시 "0000"은 실제 토큰을위한 스탠드입니다. – Feanaro

+0

보기 페이지 코드를 제공해주세요. – Aravindan

답변

1

기사를 여러 번 시도하고 연구 한 결과 마침내 내 문제를 정확하게 설명한 an article을 발견했습니다!동일한 문제가 발생하는 경우 기사를 확인하십시오.

문제는 해당 동작의 하나의 매개 변수에 [FromBody] 특성을 사용해야한다는 것이 었습니다. juketrack을 모델로 옮긴 후 마침내 기대했던대로 작동했습니다.

모두에게 도움을 주셔서 감사합니다. 여러분 모두 올바른 방향으로 나를 설정합니다!

1

당신의 TrackController이 시도 :

나는 또한이 Register() WebApiConfig.cs에서 게시하도록하겠습니다해야합니다. 여러 매개 변수를 사용 중이므로 선택적 매개 변수로 선언해야합니다.

[HttpPost] 
public Object Index(string token="", string juke="", string track="") 
{ 
} 

당신은 token이 구성 DefaultIndexBackEnd 라우팅에 옵션으로 선언 token 필수 때문에 매개 변수를 만들 수 있습니다. 나는 POST 동작을위한 하나 이상의 매개 변수가있을 때 [FromBody] 속성을 사용하는 것이 좋습니다.

1

먼저 일반적인 REST 웹 API가 어떻게 작동하는지 이해하는 것이 중요합니다. 일반적으로 특정 동작에 대해 다른 HTTP 동사 (GET, POST, PUT, DELETE)를 사용합니다.

  • GET : 서버에서
  • POST를 엔티티 (또는 집합)를 얻을 :
  • PUT을 새로운 법인을 만들 : 업데이트
  • 삭제 기존의 엔티티 : 기존 엔티티
에게 삭제를

Index 작업에서 [HttpPost]을 볼 때 REST API 패턴이 손상되었다고 생각됩니다.

대신 컨트롤러에서 Entity Get(int id) 작업 (데이터 가져 오기)과 void Post(Entity entity) 작업을 통해 새 레코드를 만들어야합니다.

MVC API 프레임 워크는 HttpGet 또는 HttpPost으로 작업을 꾸밀 필요가 없으므로 MVC API 프레임 워크는 이름을 기반으로 작업에 요청을 전달합니다.

예를 들어 here을 살펴볼 수 있습니다.

+0

알아요, 이것이 무엇인지, 트랙을 만들고, 트랙 매개 변수는 다른 외부 소스에서 캐시 된 사본을 만들고이를 쥬크에 바인드합니다. 나는'Post()'와'Get()'액션을 시도 할 것이다. – Feanaro

+0

OP가 게시 한 코드가 REST를 위반한다는 것에 동의합니다. – BenjaminPaul