【问题标题】:Retrieve Instance of ActionExecutingContext检索 ActionExecutingContext 的实例
【发布时间】:2015-04-28 16:10:54
【问题描述】:

我想在

中检索 ActionExecutingContext 的实例

public ActionResult Contact2(字符串一,字符串二)

而不是在albumAttribute类中。

有可能吗?

谢谢!

        [HttpPost]
        [album]
        public ActionResult Contact2(string one, string two)
        {
            ViewBag.Message = "Your contact page.";

            var ss = Response.Status;

            var genres = new List<Genre>
            {
                new Genre { Name = "Disco"},
                new Genre { Name = "Jazz"},
                new Genre { Name = "Rock"}
            };
            //return View(genres);


            //return View("contact2", genres);

            return View("contact22", genres);
        }





    public class albumAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {

            HttpRequestBase req = filterContext.HttpContext.Request;
            HttpResponseBase res = filterContext.HttpContext.Response;

             UriBuilder uriBuilder = new UriBuilder("http://" + req.Url.Authority + req.Url.LocalPath);
             NameValueCollection query = HttpUtility.ParseQueryString(uriBuilder.Query);
             query.Add("album", "first");
             uriBuilder.Query = query.ToString();

             string url = req.Url.AbsolutePath.ToString();
             res.Redirect(uriBuilder.Uri.OriginalString);

             base.OnActionExecuting(filterContext);

             /*
                UriBuilder uriBuilder = new UriBuilder("http://" + req.Url.Authority + "/Home/About");
                res.Redirect(uriBuilder.Uri.OriginalString);

                base.OnActionExecuting(filterContext);
            */     

        }
}

【问题讨论】:

  • 你到底打算用它做什么?如果您需要获取 Request 和 Response 对象,它们可以作为控制器属性直接访问
  • 简单的解释,它与一个大项目的算法有关。这个线程中的这个项目是大项目的一个简单示例。
  • 我希望在 actionresult contact2 中激活专辑属性中的代码,但我在 ActionResult 中找不到 ActionExecutingContext 的实例。

标签: c# asp.net-mvc


【解决方案1】:

根据您的 cmets:

动作过滤器在动作之前执行,因此在动作中您将无法使用base.OnActionExecuting(filterContext)

除了图像中附加的所有代码可以在没有ActionExecutingContext 对象的情况下执行之外,只需将其添加到您的操作中,并使用ResponseRequest 控制器属性获取请求和响应对象。 你也可以使用

return this.Redirect(yourUrl);

而不是res.Redirect(...)

    [HttpPost]
    [album]
    public ActionResult Contact2(string one, string two)
    {
        var req = this.Request;
        var res = this.Response;

        UriBuilder uriBuilder = new UriBuilder("http://" + req.Url.Authority + req.Url.LocalPath);
        NameValueCollection query = HttpUtility.ParseQueryString(uriBuilder.Query);
        query.Add("album", "first");
        uriBuilder.Query = query.ToString();

        string url = req.Url.AbsolutePath.ToString();
        return this.Redirect(uriBuilder.Uri.OriginalString);            
    }

【讨论】:

  • 如果您发布代码(不是图片),我可以对其进行修改以向您展示我在答案中的意思
  • 感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多