将值从ActionFilterAttribute传递给控制器

时间:2017-06-03 10:23:44

标签: asp.net-mvc asp.net-mvc-5 actionfilterattribute

我有以下带有字符串变量的基本控制器

public abstract class BaseController:Controller
{
    string encryptedSessionGuid;
}

所有其他控制器派生自基本控制器,ActionMethod具有自定义ActionFilterAttribute CheckQueryString -

public class SampleController : BaseController
{
    [CheckQueryString(new string[] {"sid"})]  
    public ActionResult SampleMethod()
    {
        return View();
    }
}

这是我的自定义属性。它将查询字符串值发送到视图。但我也想发送基本控制器变量encryptedSessionGuid

public class CheckQueryString : ActionFilterAttribute
{
    string[] keys;
    public CheckQueryString(string[] Keys) { keys = Keys; }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        HttpContext ctx = HttpContext.Current;

        foreach (var key in keys)
        {
            if (ctx.Request.QueryString[key] == null)
            {
                filterContext.Result = new RedirectResult(BulkSmsApplication.GlobalConfig.BaseUrl);
                return;
            }
            else
            {
                string value = ctx.Request.QueryString[key];
                if (string.IsNullOrEmpty(value))
                {
                    filterContext.Result = new RedirectResult(BulkSmsApplication.GlobalConfig.BaseUrl);
                    return;
                }
                else
                {
                    var viewBag = filterContext.Controller.ViewData;
                    viewBag[key] = value;
                }
            }
        }

        base.OnActionExecuting(filterContext);
    }
}

怎么做?

0 个答案:

没有答案