2014-04-03 2 views
0

나는이 컨트롤러 액션에 POST하려고 : 내가 HTML 페이지에서이를 호출 할 때웹 API 라우팅 액션의 이름에 동사를 인식하지

public async Task<IHttpActionResult> PostRegister(JObject data) 

는 내가로 변경 그러나 경우, 404 오류를 반환합니다 :

public async Task<IHttpActionResult> Register(JObject data) 

호출이 올바르게 라우팅되었습니다. VS에서 웹 API 프로젝트를 만들면 작동하는지 알지만 빈 웹 프로젝트 템플릿에서이 프로젝트를 빌드하고 있습니다. 액션 이름에서 동사 힌트를 가져 오는 것 같지 않습니다.

public static void Register(HttpConfiguration config) 
    { 
     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "AdminApi", 
      routeTemplate: "api/{controller}/admin/{action}/" 
     ); 
    } 

JQuery와 전화 : 당신은 (및 선택 사양 일) 경로 매개 변수로 {action}을 추가 한 때문에

$.post("api/account/admin/register/", { name: "Me", password: "test" }); 

답변

0

, 당신은 지금 제공 할 필요가 아래

라우팅 설정입니다 모든 매개 변수에 대한 경로 매개 변수, 즉 항상 조치를 제공하십시오. 그리고 ActionMethod 이름과 일치해야합니다. HTTP 동사 힌트는 허용 된 작업에 계속 적용됩니다 (예 : GET api/account/admin/postregister/).

수정/변경하는 데 사용할 수있는 옵션이 몇 가지 있습니다. 당신은 작업 이름 무시할 수 :

[ActionName("Register")] 
public async Task<IHttpActionResult> PostRegister(JObject data) 

을 또는 당신은 등록 전화 만 허용 게시물을 aatribute

[HttpPost] 
public async Task<IHttpActionResult> Register(JObject data) 

을 사용 또는 라우팅의 '더 편안하고'스타일로 갈 수 있었다. 예를 들어 등록 컨트롤러를 생성하고 간단히 등록을 생성하는 POST 메소드를 가질 수 있습니다.

+0

당신이 맞습니다 :-) –