رفع خطای 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
درست شد 🌝
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2