Мне нужно сделать собственный маршрут, но я столкнулся с проблемой. Это мой маршрутПроблемы с настраиваемыми маршрутами
routes.MapRoute(
name: "IndexByUserName",
url: "{controller}/{action}/{username}",
defaults: new { controller = "Profile", action = "Edit", username = UrlParameter.Optional }
);
И когда я иду к URL .../Profile/Edit/UserTest
, например я получаю 404 Not Found ошибка, потому что мой параметр username
является null
. Мои действия выглядят так:
[Authorize]
[HttpGet]
public ActionResult Edit(string username)
{
ApplicationUser profile = db.Users.Find(username);
if (profile == null)
{
return HttpNotFound();
}
return View(profile);
}
[Authorize]
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "Id, Nickname, FirstName, LastName, SecondName, City, Address, Description, Skype, TelephoneNum")] ApplicationUser profile)
{
if (ModelState.IsValid)
{
var user = db.Users.Find(profile.Id);
if (user == null)
{
return HttpNotFound();
}
user.UserName = User.Identity.GetUserName();
user.FirstName = profile.FirstName;
user.SecondName = profile.SecondName;
user.LastName = profile.LastName;
user.SocialNetworks = profile.SocialNetworks;
user.Address = profile.Address;
user.City = profile.City;
user.TelephoneNum = profile.TelephoneNum;
user.Description = profile.Description;
db.Entry(user).State = EntityState.Modified;
db.SaveChanges();
return Redirect("/Profile/Index/" + User.Identity.Name);
}
return View(profile);
}
Я не знаю, где проблема.
Я не удаляю корень по умолчанию. –
Вам не обязательно. Но поскольку вы не удаляете маршрут по умолчанию, причина, по которой ваш маршрут не работает, вероятно, потому, что по умолчанию выбирается вместо вашего. Ответ, на который я ссылаюсь, указывает, как использовать ваш маршрут, не удаляя маршрут по умолчанию. – Kolichikov
Я видел ссылку, которую вы вложили в свой ответ, но когда я помещаю свой собственный маршрут до Default, ничего не происходит. :( –