ASP.NET Core MVC - Escaping slash issue
Здравейте колеги имам следния проблем: когато се опитам да използвам RedirectToAction ми ескейпва наклонената черта - например RedirectToAction(nameof(Details) + "/" + model.Username) и ми връщa "Details%2F" ?! В таг хелперите е същата работа но там поне може вместо asp-action да си сложим един "а href" и готово, при RedirectToAction как ще стане, някой ако може да помогне ? Търсих из нета но не намерих адекватни решения, а в документацията на майкрософт пише че трябва да се ескейпне с дабъл слаш или овъррайд на "DefaultODataPathHandler" - първия начин не работи а за втория си нямам идея как да стане :)
Не става, така връща само "Details" без /{username} :)
А приемаш ли string username в Details action-а? Или името на праметъра е различно или model.Username е null.
"[Route("Users/Details/{username}")]
public IActionResult Details(string username)"
При дебъг username не е null, просто при редиредт екшъна ми ескейпва наклонената черта ... :)
Дай кода
https://pastebin.com/pbewZDci
Със: return RedirectToAction(nameof(Details), new{ username = model.Email }) Няма как да не стане. Просто внимавай какво подаваш и после по какво взимаш юзъра - по username или по email (ако има разлика).
Колегата Вълчанов беше предложил този вариант но връща само "/Users/Details"
А провери ли дали всъщност е username = model.Email или username = model.Username?
Просто няма логика да не работи
Добавил съм си username в модела така че не взема email по default , знам че няма логика за това пиша тук, рових в гугъл, къде ли не но без успех
Хм, в момента нямам Core при мен да дебъгна, но ако искаш пробвай да махнеш route атрибута, то и без това по дифолт ще ти мапне същия route.
PS. не го прави това с "xxx" + "/" + "y", подавай си обекта в метода.
Ако не сложа атрибута Route.... въобще не ми го мачва, може би защото by deafult е id
[Route("Users/Details/{username?}")]
Пробвай с този route
И с този не тръгва :
А как редиректваш в този случай?
Намерих грешката, когато подавам тук "return RedirectToAction(nameof(Details), new { username = model.Username });" ,
модела на username винаги ми е null, може би защото не може да bindne от формата понеже имам полета само за имейл, телефон и пароли и само тях ми дава от модела, но когато го променя на "return RedirectToAction(nameof(Details), new { username = user.UserName });"
директно от user manager GetUserAsync си го взима username и така се оправи ....... Благодаря момчета за насоките :)