Arn*_*rty 31 asp.net asp.net-mvc redirecttoaction action-filter asp.net-mvc-3
我想确保QueryString中的特定参数,在我的情况下,request_id传播到重定向的操作.
比方说,我有一个动作First,
[HttpPost]
public ActionResult First()
{
////////////////////
// Lots of code ...
////////////////////
return RedirectToAction("Second");
}
Run Code Online (Sandbox Code Playgroud)
现在说,First回发中有一个参数QueryString,我想传递给Second动作.一种方法是传递RedirectToAction调用本身的值,
string requestId = Request.QueryString[REQUEST_ID_KEY];
return RedirectToAction("Second", new { REQUEST_ID_KEY = requestId });
Run Code Online (Sandbox Code Playgroud)
但我必须在一系列操作中执行此操作,并且我不愿意将请求ID传播逻辑合并到操作中.如果我可以将其合并到一个内容中会更好ActionFilter,但我无法弄清楚如何从ActionFilter向QueryString添加参数.有任何想法吗?
Dar*_*rov 50
public class PreserveQueryStringAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
var redirectResult = filterContext.Result as RedirectToRouteResult;
if (redirectResult == null)
{
return;
}
var query = filterContext.HttpContext.Request.QueryString;
// Remark: here you could decide if you want to propagate all
// query string values or a particular one. In my example I am
// propagating all query string values that are not already part of
// the route values
foreach (string key in query.Keys)
{
if (!redirectResult.RouteValues.ContainsKey(key))
{
redirectResult.RouteValues.Add(key, query[key]);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
[HttpPost]
[PreserveQueryString]
public ActionResult First()
{
////////////////////
// Lots of code ...
////////////////////
return RedirectToAction("Second");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11302 次 |
| 最近记录: |