رفع خطای Invalid non-ASCII or control character in header: 0x0634 در Asp.net core
سلام
پروزه من با Asp.net core 2.1 هست . توی پروژه یک مشکلی با دستور Redirect دارم. بخشی از Url به صورت فارسی هست. مثل زیر :
HTTP://localhost:50551/Product/2/موبایل
در واقع آخرین پارامتر Url فارسی هست و خطای زیر رو دریافت می کنم :
InvalidOperationException: Invalid non-ASCII or control character in header: 0x0634
اما وقتی آخرین پارامتر رو انگلیسی ارسال میکنم هیچ خطایی نداره و درست کار می کنه
HTTP://localhost:50551/Product/2/mobile
کدهای بخش کنترلر هم به صورت زیر هست
[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();
}
لطفا راهنمای کنید برای رفع خطا چه کاری باید انجام بدم؟
پاسخ هوش مصنوعی
برای رفع خطای Invalid non-ASCII or control character in header که در هنگام استفاده از URL های حاوی حروف فارسی دریافت می کنید، می توانید از روش های زیر استفاده کنید:
1. **استفاده از URL Encoding**:
قبل از ارسال URL به متد Redirect، شما باید آن را URL Encode کنید. این کار باعث می شود تا تمام کاراکترهای غیر ASCII به فرمت قابل قبول تبدیل شوند.
if (Url.IsLocalUrl(returnUrl) && !string.IsNullOrEmpty(returnUrl))
{
return Redirect(Uri.EscapeDataString(returnUrl));
}
2. **استفاده از RedirectToAction به جای Redirect**:
اگر می خواهید کنترل بیشتری روی ریدایرکت داشته باشید، می توانید از RedirectToAction استفاده کنید که ممکن است در برخی موارد بهتر عمل کند.
return RedirectToAction("ActionName", new { id = 2, name = "موبایل" });
با استفاده از یکی از روش های بالا، می توانید از بروز خطا در هنگام ریدایرکت به URLهای حاوی حروف فارسی جلوگیری کنید.
این خطا بخاطر دستور Redirect(URL) هست. البته احتمالا شما از هاست Kestrel دارید استفاده می کنید چون توی هاست IIS این مشکل معمولا پیش نمیاد.
اما برای رفع این خطا شما می تونید از دستورات زیر به جای دستورات خودتون استفاده کنید
var host= "http://localhost:60695";
var path = "/Product/2/موبایل";
path=String.Join(
"/",
path.Split("/").Select(s => System.Net.WebUtility.UrlEncode(s))
);
return Redirect(host+path);
دلیل اصلی این خطا این هست که پروتکل Http کاراکترهای غیر اسکی رو قبول نمیکنه. برای راهنمایی بیشتر در این مورد می تونید به این لینک هم مراجعه بفرمایید.
ممنون از شما saedbfd
درست شد 🌝
- آموزش نصب و راه اندازی دیتابیس PostgreSQL در ویندوز
- PostgreSql چیست ؟ چه کاربردهایی دارد ؟
- دسترسی به پکیج های nuget در زمان قطع نت بین الملل
- نمایش آخرین ردیف دیتاگیرید موقع لود در wpf
- مشکل اینترنت جهانی و عدم دسترسی به cdnjs.cloudflare.com
- مشکل در نصب sql server 2022
- جلوگیری از اد شدن خودکار در گروه و کانال تلگرام
- کم کردن حجم فیلم توسط کد در Asp net core
- چه کسانی استوری تلگرام را می بینند ؟
- برای کسب و کار تلگرام پرمیوم بهتره یا واتس اپ بیزینس ؟
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2