예제 ASP.NET MVC 3 응용 프로그램을 사용하고 있습니다. 내가 작업중인 프로젝트의 API에 대한 개념 증명을 위해 HttpWebRequest
을 사용하여 로그인 요청을 보내고 있습니다. JSON으로 데이터를 제출하고 "Application/json"이라는 컨텐트 유형을 사용하고 있습니다.ModelState에 모든 필수 값이 포함되어 있어도 DefaultModelBinder 바인딩 모델이 아닙니다. (항상 null입니다.)
ModelState
내가 볼 것으로 예상 모든 키와 값을 포함하고 있다는 점이다
[HttpPost]
[Api]
public bool ApiLogOn(LogOnModel model)
{
if (ModelState.IsValid && model != null)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
return true;
}
}
return false;
}
(예 : 사전 { "사용자 이름"= "사용자 이름"을 포함, "여기
는 내가 가지고있는 방법이다 LogOnModel 클래스의 세 가지 속성 인 "Password"= "password", "RememberMe"= true}) 메서드를 호출 할 때마다 객체model
이 null입니다.
"application/x-www-form-urlencoded"를 사용할 때이 문제가 발생하지 않습니다. 또한 내 Application_Start
방법
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
를 추가하지 않고 및
와 을 시도했습니다. var credentials = new LogOnModel() { UserName = "username", Password = "password", RememberMe = true };
var result = PostData<LogOnModel, bool>(@"url goes here", credentials);
protected R PostData<T, R>(string uri, T postData)
{
var request = WebRequest.Create(uri) as HttpWebRequest;
request.Headers.Add("X-Requested-With", X_REQUESTED_WITH_HEADER);
request.Accept = "application/json";
request.Method = "POST";
request.CookieContainer = cookieJar;
request.ContentType = "application/json";
var serializerT = new DataContractJsonSerializer(typeof(T));
var serializerR = new DataContractJsonSerializer(typeof(R));
if (postData != null)
{
using (var stream = request.GetRequestStream())
{
serializerT.WriteObject(stream, postData);
}
}
try
{
var response = request.GetResponse() as HttpWebResponse;
if (response.StatusCode == HttpStatusCode.OK)
{
using (var stream = response.GetResponseStream())
{
var result = (R)serializerR.ReadObject(stream);
return result;
}
}
else
{
return default(R);
}
} catch { return default(R); }
}
'[Api]'속성은 무엇입니까? 그것은 표준이 아닙니다. 당신이 쓴 몇 가지 맞춤 동작 필터입니까? 이 속성없이 코드를 테스트 한 결과 완벽하게 정상적으로 작동했습니다. 또한 ASP.NET MVC 컨트롤러 작업에서 부울을 반환하는 이유는 무엇입니까? 그들은 ActionResults를 반환해야합니다. 귀하의 경우 그것은 JsonResult가 될 것입니다. –
흥미 롭습니다. 실제로 Api 속성을 제거하면 실제로 문제가 해결되는 것 같습니다. http://mvcapi.codeplex.com/에서 제공됩니다. 이제 이것을 허용 된 대답으로 게시 하겠지만 그 속성이 문제를 일으키는 이유를 살펴 보겠습니다. –