2015-04-28 3 views
1

Я хотел бы получить экземпляр ActionExecutingContext внутриПолучение экземпляра ActionExecutingContext

общественного ActionResult Contact2 (строка одной строки, два)

, а не в классе albumAttribute.

Возможно ли это?

Спасибо! enter image description here

 [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); 
      */  

     } 
} 
+0

Что именно вы планируете делать с ним? Если вам нужны объекты Request and Response, они напрямую доступны в качестве свойств контроллера. –

+0

В простом объяснении это связано с алгоритмом из большого проекта. Этот проект в этом потоке является простым образцом большого проекта. –

+0

Я хотел бы, чтобы код внутри albumattribute активировался внутри actionresult contact2, но я не могу найти экземпляр ActionExecutingContext внутри ActionResult. –

ответ

1

на основе ваших комментариев:

Действие фильтра выполнить до действия так внутри действий вы не сможете использовать base.OnActionExecuting(filterContext).

Кроме этого весь код, который прилагается в изображении может быть выполнен без ActionExecutingContext объекта, просто добавьте его в действие и для получения запроса и ответ объекты используют Response и Request свойства контроллера. Вы также можете использовать

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);    
    } 
+0

Если вы публикуете свой код (а не как изображение), я могу его изменить, чтобы показать вам, что я имел в виду именно в ответ –

+0

Спасибо за помощь! –

Смежные вопросы