Asp.net
在 RedirectToAction 呼叫中傳播 QueryString 參數
我想確保 QueryString 中的特定參數(在我的情況下
request_id)被傳播到重定向操作。例如,我有一個 Action
First,[HttpPost] public ActionResult First() { //////////////////// // Lots of code ... //////////////////// return RedirectToAction("Second"); }現在說,
First回發在 中有一個參數QueryString,我想將其傳遞給Second操作。一種方法是在RedirectToAction呼叫本身中傳遞值,string requestId = Request.QueryString[REQUEST_ID_KEY]; return RedirectToAction("Second", new { REQUEST_ID_KEY = requestId });但是我必須在一系列動作中執行此操作,並且我不願意將請求 id 傳播邏輯合併到動作中。如果我可以將它合併到一個 中會更好
ActionFilter,但我不知道如何從 ActionFilter 向 QueryString 添加參數。有任何想法嗎?
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]); } } } }然後:
[HttpPost] [PreserveQueryString] public ActionResult First() { //////////////////// // Lots of code ... //////////////////// return RedirectToAction("Second"); }