2012-03-01 3 views
27

내에서 액션 매개 변수의 값을 얻기 나는 JQuery와에서에 게시하고 작업을해야합니다. 다른 그룹 작업이 있으므로 권한 부여 특성을 사용하여 변경 작업을 수행하는 사람에게 변경 권한이 있는지 확인하고 싶습니다.액션 필터

filterContext.HttpContext.Request.Params["groupId"]에 액세스하여 groupId을 GET 요청에 성공적으로 검색하는 AuthorizationAttribute이 이미 있지만 POST에서는 작동하지 않습니다. Request.Form은 비어 있으며 Request.Params입니다. 여기

은 내 권한 부여 특성에이 코드입니다 :

public int groupId { get; set; } 

protected override bool AuthorizeCore(HttpContextBase httpContext) 
{ 
    username = httpContext.User.Identity.Name.Split('\\').Last(); 

    // awesome permissions checking goes here... 

    return authorized; 
} 

public override void OnAuthorization(AuthorizationContext filterContext) 
{ 
    groupId = int.Parse(filterContext.HttpContext.Request.Params["groupId"]); // this line throws an exception 
    base.OnAuthorization(filterContext); 
} 

나는이 answer 살펴 보았다하지만 내 Form 속성은 빈 :(JQuery와 포스트 보여

업데이트됩니다 :

var serverComm = { 
    post: function (url, data) { 
     return $.ajax({ 
      url: url, 
      type: 'POST', 
      contentType: 'application/json; charset=utf-8', 
      data: JSON.stringify(data) 
     }); 
    }, 
    get: function (url, data) { 
     return $.ajax({ 
      url: url, 
      type: 'GET', 
      cache: false, 
      contentType: 'application/json; charset=utf-8', 
      data: data 
     }); 
    } 
}; 
// some awesome code later... 
serverComm.post(editGroupNameUrl, { groupId: group.id, name: newName }) 
+0

매개 변수는 Form 매개 변수로 설정되어 있습니까? QueryString에있을 가능성이 있습니까? – ivowiblo

+0

QueryString이 비어 있습니다. 그리고 "Form 매개 변수로"라는 것은 무엇을 의미합니까? 맨 위로 코드 예제 – soniiic

+0

에 내 작업을 볼 수 있습니까? 양식 코드를 게시 할 수 있습니까? – ivowiblo

답변

42

코드가 작동하지 않는 이유는 요청을 JSON 문자열로 보내기 때문입니다. 따라서 POST 본문에는 요청 매개 변수가 없으므로 Request.Params에서 가져올 수 없습니다.

그래서 대신 :

filterContext.HttpContext.Request.Params["groupId"] 

사용 :

filterContext.Controller.ValueProvider.GetValue("groupId").AttemptedValue 

는 클라이언트에 의해 보내 해당 값을 얻기 위해 (당신의 케이스 JsonValueProvider에서) 값 공급자를 쿼리합니다.

+0

authorize 속성에서 작동합니까? – Dragon

1

stringify하지 않고 시도하십시오. MVC 요청 매개 변수 -> 작업 매개 변수 외에 바인딩 다른 방법을 이해하는 것 같아요. 게시 된 json을 이해하고 있습니다. JQuery, stringify를 사용하지 않고 데이터 객체 만 전달하면 각 필드가 요청 매개 변수로 게시된다 (적어도 그렇게 생각한다). 시도해보기가 쉽습니다.