Asp.net-Core
重定向時標頭中的非 ASCII 或控製字元無效
我正在使用 asp.net core 2.1,但我在重定向時遇到問題。我的網址是這樣的:
HTTP://localhost:60695/ShowProduct/2/شال-آبی最後一個參數是波斯語。它拋出以下錯誤:
InvalidOperationException: Invalid non-ASCII or control character in header: 0x0634但是當我改變英文的最後一個參數時:
HTTP://localhost:60695/ShowProduct/2/scarf-blue它有效,一切正常。我正在使用以下程式碼進行重定向:
[HttpPost] [Route("Login")] public IActionResult Login(LoginViewModel login, string returnUrl) { if (!ModelState.IsValid) { ViewBag.ReturnUrl = returnUrl; return View(login); } //SignIn Codes is hidden if (Url.IsLocalUrl(returnUrl) && !string.IsNullOrEmpty(returnUrl)) { return Redirect(returnUrl); } if (permissionService.CheckUserIsInRole(user.UserId, "Admin")) { return Redirect("/Admin/Dashboard"); } ViewBag.IsSuccess = true; return View(); }我該如何解決這個問題?
一般而言,它是由
Redirect(returnUrl). 此方法
將返回 aRedirectResult(url)並最終設置Response.Headers["Location"]如下:Response.Headers[HeaderNames.Location] = returnUrl;但是
HeadersHTTP 不接受非 ASCII字元。已經有一些問題(#2678、#4919)建議預設對 URL 進行編碼。
但是還沒有這樣的開箱即用功能。快速解決您的問題:
var host= "http://localhost:60695"; var path = "/ShowProduct/2/شال-آبی"; path=String.Join( "/", path.Split("/").Select(s => System.Net.WebUtility.UrlEncode(s)) ); return Redirect(host+path);