2012-03-01 7 views
27

内アクションパラメータの値を取得する私は、私はjqueryのからへの投稿午前作用を有します。私は他のいくつかのグループアクションを持っていますので、変更を行う人に変更を許可する権限があることを確認するために、認可属性を使用したいと考えています。アクションフィルタ

は、私はすでにfilterContext.HttpContext.Request.Params["groupId"]にアクセスしてGETリクエストに成功しgroupIdを取得AuthorizationAttributeを持っていますが、それはポストに来るとき、それは動作しません。 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が空です。そして、「フォームパラメータとして」ということはどういう意味ですか?あなたはトップコードの例で私の行動を見ることができます – 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がリクエストパラメータ - > actionパラメータ以外のバインディングの別の方法を理解していると思います。 jsonが投稿したことを理解しています。 JQueryは、データ・オブジェクト(stringifyなし)だけを渡すと、各フィールドをリクエスト・パラメータとして送信します(少なくとも、そうだと思います)。試してみるのは簡単です。

関連する問題