gpt4 book ai didi

asp.net-mvc-3 - 在 Action 过滤器中获取 Action 参数的值

转载 作者:行者123 更新时间:2023-12-03 09:21:39 28 4
gpt4 key购买 nike

我有一个要从 jquery 发布的操作:

[HttpPost]
public void UpdateGroupName(int groupId, string name)
{
authorisationRepository.UpdateGroupName(groupId, name);
}

这适用于 groupIdname .我还有其他一些组操作,因此我想使用授权属性来确保执行更改的人员有权进行更改。

我已经有 AuthorizationAttribute检索 groupId通过访问 filterContext.HttpContext.Request.Params["groupId"] 成功处理 GET 请求但是当涉及到 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 })

最佳答案

您的代码不起作用的原因是因为您将请求作为 JSON 字符串发送。因此,POST 正文中没有请求参数,您无法在 Request.Params 中获取它们。 .

所以而不是:

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

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

这将查询值提供程序(在您的情况下为 JsonValueProvider)以获取客户端发送的相应值。

关于asp.net-mvc-3 - 在 Action 过滤器中获取 Action 参数的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9518827/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com