如何在ASP.NET Core Razor Pages中动态为URL添加参数?
解决URL手动输入时自动添加culture参数导致的无限重定向问题
你的代码触发了ERR_TOO_MANY_REDIRECTS(页面无法正常工作,localhost已多次重定向您),核心原因是每次访问/post页面(不管URL里有没有culture参数),都会执行OnGet方法并强制重定向到带culture的/post,重定向后的请求又会再次进入OnGet方法,形成无限循环。
修复方案
需要先判断当前URL是否已经包含culture参数,仅当参数不存在时才执行重定向。修改后的代码如下:
public IActionResult OnGet() { // 检查URL是否已经携带culture参数 if (!Request.Query.ContainsKey("culture")) { string culture = "fa"; if (Request.Cookies.ContainsKey("_culture")) { culture = Request.Cookies["_culture"].ToString(); } // 重定向到带culture参数的当前页面 return Redirect($"/post?culture={culture}"); } // 已存在culture参数,正常返回页面 return Page(); }
进阶优化(保留其他URL参数)
如果需要保留URL中原本存在的其他参数(比如/post?id=1),可以用UriBuilder来处理,避免丢失参数:
public IActionResult OnGet() { if (!Request.Query.ContainsKey("culture")) { string culture = "fa"; if (Request.Cookies.ContainsKey("_culture")) { culture = Request.Cookies["_culture"].ToString(); } var uriBuilder = new UriBuilder(Request.GetDisplayUrl()); var query = System.Web.HttpUtility.ParseQueryString(uriBuilder.Query); query["culture"] = culture; uriBuilder.Query = query.ToString(); return Redirect(uriBuilder.ToString()); } return Page(); }
内容的提问来源于stack exchange,提问作者Farna
相关产品推荐
相关产品推荐

