我有一个动作,我从jquery发布到:
[HttpPost]
public void UpdateGroupName(int groupId, string name)
{
authorisationRepository.UpdateGroupName(groupId, name);
}
Run Code Online (Sandbox Code Playgroud)
这适用于groupId和name.我还有其他一些组操作,因此我想使用授权属性来确保执行更改的人员有权进行更改.
我已经有一个通过访问成功AuthorizationAttribute检索groupIdGET请求,filterContext.HttpContext.Request.Params["groupId"]但是当它涉及到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);
}
Run Code Online (Sandbox Code Playgroud)
我看了这个答案,但我的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 })
Run Code Online (Sandbox Code Playgroud)
Dar*_*rov 45
您的代码无效的原因是您将请求作为JSON字符串发送.因此POST主体中没有请求参数,您无法在其中获取它们Request.Params.
所以代替:
filterContext.HttpContext.Request.Params["groupId"]
Run Code Online (Sandbox Code Playgroud)
使用:
filterContext.Controller.ValueProvider.GetValue("groupId").AttemptedValue
Run Code Online (Sandbox Code Playgroud)
这将查询值提供程序(在您的情况下为JsonValueProvider)以获取客户端发送的相应值.
| 归档时间: |
|
| 查看次数: |
26573 次 |
| 最近记录: |