2010-01-13 3 views
0

몇 가지 선택적 값과 정수 값을 허용하는 내 컨트롤러에 간단한 액션을 갖고 싶습니다.HTTP-POST 데이터를 받아들이는 간단한 ASP.NET MVC 작업 메서드를 만드는 방법은 무엇입니까?

이 내가 얻고 자하는 나의 길이다 : 나는 교육을받지 못한 인상을 해요 ...

[AcceptVerbs(HttpVerbs.Post)] 
public JsonResult Create(int userId, 
         int addressId, 
         byte baseScore, 
         byte reviewType, 
         string subject, 
         string description) 
{ ... } 

HTTP.POST 
/review/create 

를이 내가하고 싶은 작업 방법입니다 그 모든 위의 인수는 양식 모음 값에 의해 채워질 것입니다 ... 그러나 그것은 일어나지 않습니다. 또한, 나는 ... 여기

내 Global.asax에의 ..., 경로를 작성합니다 그 값은 양식 포스트 데이터이기 때문에 ... 그 처리 방법을 몰라

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    // Api - Search methods. 
    routes.MapRoute(
     "Search Methods", 
     "{controller}/{action}" 
    ); 

사실, 액션 메소드는 찾지 못했기 때문에 절대 호출되지 않습니다. (

그러나 이러한 인자가 없으면 액션을 생성하고 실행하면 ?????????

당신은 몇 가지 필요한 동의를 할 수있는 경로와 행동 방식과 몇 가지 선택 사항을 작성하는 방법

경로, 검토/생성을위한 인수?

+0

경로 정의를 Global.asax에 표시 할 수 있습니까? –

답변

0

지금까지 내가 당신과 같이 컨트롤러 액션을 다시 작성할 수 있습니다 볼 수 있습니다 :

public ActionResult Create(int foo, int bar, byte blah, string name, int? xxx) { 
    // code here 
} 

ModelBinder를 다음 해당 foo는, 바, 어쩌구 설정을 보장합니다. 이름과 xxx는 null 일 수 있습니다. 나는 그 순간을 테스트 할 수는 없지만 액션의 반환 유형은 ActionResult이어야한다고 생각합니다. 당신이 양식을 POST'ing하는 경우

+0

넵 .. 괜찮아요. 나는 또한 그걸 시도해 봤지만 어떻게 테스트해야할지 모르겠습니다. 단위 테스트는 100 % 작동합니다. Fiddler 테스팅/수동 브라우저 POST 테스트는 ... 수동으로 양식 제출이있는 html 페이지를 만들지 않는 한, 그렇지 않습니다. –

+0

흠 ... 피들러를 사용한 적이 없으므로 그것에 대해 많이 말할 수는 없습니다. 아마도 바인딩 또는 asp.net에 의해 사용되는 일부 머리글 누락 된? –

+0

또는 훨씬 간단합니다. Fiddler는 Utf8을 인코딩합니까? –

0

, 그냥 양식의 요소 (텍스트 상자, 체크 박스, 텍스트 영역, 등) 당신의 방법에있는 매개 변수와 일치하는 아이디의이 있는지 확인하십시오. 대신에 FormCollection을 메서드에 전달하고 myFormCollection["foo"]을 사용하여 값의 문자열 표현을 얻을 수 있습니다 (int로 파싱 할 수 있음).

+0

예 - 그게 사실입니다하지만 난 그게 너무 많은 노력 때문에 HTML 양식 페이지를 사용하고 싶지 않아요. 날 원시 POST는 테스트 물건을 제출할 수있는 응용 프로그램 목록 FIDDLER를 사용하고 싶습니다 ... –

0

제 경험상,이 질문에 대한 핵심 요소와 개념이 많이 누락되었습니다.

무엇보다도, 난 당신이 양식없이 POST를 실행할 수 있다고 생각하지 않습니다. 폼에는 컨트롤러 메서드로 전달되는 값을 가져 오는 컨트롤이 있어야합니다. 목표가 POST 컨트롤러 메서드를 단순히 단위 테스트하는 것이면 사용자의 의견 중 하나를 기반으로 수행중인 것으로 보이는 메서드에서 메서드를 직접 호출하면됩니다. 견해를 포함한다면, 단위 테스트가 아닌 통합 테스트를 수행하고있는 것입니다. 테스트 유형에 관계없이 양식을 작성하지 않기 때문에 테스트가 항상 실패합니다. Fiddler, Firebug 또는 다른 메커니즘을 사용하여 POST를 강제 실행하더라도 여전히보기를 테스트하지 않고 HTTP 프로토콜을 테스트하고 있습니다.

웹 페이지를 테스트하기 위해 WatiN 또는 Selenium과 같은 웹 응용 프로그램 테스트 도구를 사용하는 것이 좋습니다. 실제로는 아무 것도 테스트하지 않는 빠르고 지저분한 테스트를 함께하는 것이 좋습니다. 소식 요청 집합 콘텐츠 유형에

=
+0

사실은 API입니다 - 마치 Twitter의 API와 같은 -보기가 없으므로 –

+0

또한 양식없이 게시물을 실행하려면 요청에 대한 Content-Type 헤더 값이 있는지 확인하고 올바른 값 (=>'Content- 유형 : application/x-www-form-urlencoded;'(Claus Trojahn c에게 건배 이 답변을위한이 글에서는 생략 부호). –

0

"애플리케이션/JSON; 문자셋 = UTF-8"과 JSON 형식에있어서의 파라미터에 대한 값을 전달한다. 이 Asp.MVC 해당 값을 FormCollection에서 보지 않도록합니다.

+0

하지만 그게 내가 뭘 원하는 :(나는 (여전히 폼 게시물이 필요합니다.) ( –

+0

그 경우에는 콘텐츠 유형 = "응용 프로그램/X - www를 - formurlencoded"설정해야합니다. 이런 식으로 보입니다. userId = 12 & addressId = 3 & .... – sarvesh

관련 문제