【发布时间】:2017-05-25 13:14:24
【问题描述】:
试图弄清楚如何将参数从动作过滤器传递到控制器动作,但没有运气。我去过this SO question并尝试了两个答案。 当我调试我的应用程序时,我没有得到控制器操作参数的值,它始终为空。
这里是动作过滤器...
public class FacebookCheckPermission : ActionFilterAttribute
{
public string redirectURL { get; set; }
public async override void OnActionExecuting(ActionExecutingContext filterContext)
{
var myBaseController = (BaseController)filterContext.Controller;
PermissionRequestViewModel permissionViewModel = myBaseController.GetMissingPermissions();
filterContext.RouteData.Values.Add("Value1", "Hi");
filterContext.ActionParameters["Value2"] = "Bye";
if (permissionViewModel != null &&
permissionViewModel.MissingPermissions.Count > 0)
//Code removed for brevity.
base.OnActionExecuting(filterContext);
}
}
这是控制器动作:
[FacebookCheckPermission]
public async Task<ActionResult> Index(string Value1, string Value2)
{
更新
看来我找到了问题所在。问题是我的操作过滤器是async,我有一些对 facebook 的 API 调用。如果我在 API 调用之前的任何地方声明它,我可以获得我的操作过滤器参数,但是当我在 API 调用下声明它时,我的操作参数变为空。可能是什么问题?
这是对 facebook graph API 的调用。
动态 myInfo = await fb.GetTaskAsync("me?fields=id,first_name,last_name,link,locale,email,name,birthday,gender,location,age_range,about".GraphAPICall(appsecret_proof));
【问题讨论】:
-
这只是例如真实的字符串名称与我在这里写的不同,我会以任何方式更改它
-
@Igor 感谢您的更正:)
-
在更新时你问另一个问题,我建议检查答案,如果对你的问题有用,接受它,然后用正确的标题和正文问另一个问题,这就是 Stackoverflow 推荐的方式。
标签: c# asp.net-mvc action-filter