2012-05-31 4 views
0
[HttpPost] 
     public HttpResponseMessage<Response> Login(string username, string password) { ... } 

다음 WebAPI 방법이 궁금합니다. 메소드에 매개 변수를 전달하는 방법은 무엇입니까? POST 데이터가 아닌 것으로 가정합니다. 웹 양식에서 게시물 데이터를 보내면 응답하지 않았습니다.MVC4 다음 제어 메소드를 호출하려면 어떻게해야합니까?

<form action="/api/Authenticate/Login" id="loginForm" method="post"> 
    <fieldset> 
    <legend>Userdata:</legend> 
     <label for="username">Username</label> 
     <input id="username" name="username" type="text" value="" /> 
     <label for="password">Password</label> 
     <input id="password" name="password" type="password" value="" /> 
     <button type="submit">Login</button> 
    </fieldset> 
</form> 

답변

0

웹 API 메서드는 일반적으로 HTML을 반환하지 않으므로 HTML 양식의 동작으로 사용하기위한 것이 아닙니다. 이들은 일반적인 ASP.NET MVC 컨트롤러에서 사용하기위한 것입니다. 따라서 POST 동사를 사용하여이 메서드를 호출하고 POST 요청 본문의 일부로 두 개의 인수를 전달할 수 있지만 구성한 미디어 유형에 따라 XML 또는 JSON이됩니다. 또 다른 가능성은 클라이언트 측 자바 스크립트 AJAX 호출을 사용하여이 메소드를 호출하는 것입니다. 고려해야 할 또 다른 사항은 표준이 아닌 방법의 이름입니다 : Login. 호출 할 수있게하려면 응용 프로그램에서 작성된 기본 경로를 수정하고 {action} 토큰을 경로에 포함시켜야합니다.

그래서 :

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

을 당신은 /api/somecontroller/login에 POST 요청을 보낼 것입니다 :

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

이 될 것이다.

그리고 당신은 규칙에 충실하려는 경우 다음과 같은 것이다 : 다음

public class LoginController : ApiController 
{ 
    // POST /api/login 
    public HttpResponseMessage<Response> Post(string username, string password) 
    { 
     ... 
    } 
} 

과 :

<form action="/api/login" id="loginForm" method="post"> 
    <fieldset> 
    <legend>Userdata:</legend> 
     <label for="username">Username</label> 
     <input id="username" name="username" type="text" value="" /> 
     <label for="password">Password</label> 
     <input id="password" name="password" type="password" value="" /> 
     <button type="submit">Login</button> 
    </fieldset> 
</form> 
+0

네,하지만 난 그냥 webAPI에 포스트 방법을 원했고, 웹 양식을 사용하는 것보다 더 좋은 방법을 찾을 수 없었습니다. – starcorn

+0

좋아요, 그렇다면 웹 양식을 사용할 수 있습니다. 그냥 * 비 전통적인 * 액션 이름'로그인'으로 이어질 올바른 경로 설정을했는지 확인하십시오. 또는 규칙을 고수하십시오. –

+0

'action'은'/ api/authenicate/login'이어야하고 컨트롤러의 메소드 이름은'login'이어야합니까? – starcorn

관련 문제