ASP.NET MVC, адрес электронной почты как маршрут нарушения параметров - PullRequest
0 голосов
/ 23 августа 2011

У меня есть следующий результат действия:

публичное Подтверждение ActionResult (строка emailAddress)

Когда я пытаюсь получить к нему доступ:

http://localhost:8080/Signup/Confirmation?emailAddress=test%40test.com

Я понял:

The view 'test@test.com' or its master was not found or no view engine supports the searched locations. The following locations were searched:
~/Views/Signup/test@test.com.cshtml
~/Views/Signup/test@test.com.vbhtml

Что дает, почему он не ищет правильный взгляд? Если я перехожу к «/ SignUp /», он правильно показывает мне индекс, а также другие ActionResults работают правильно. Почему адрес ломает его?

Ответы [ 2 ]

2 голосов
/ 23 августа 2011

Вы все равно не должны передавать эту информацию в URL.

Если это своего рода страница «Подтверждение» из регистрации, вы можете передать другой идентификатор, например, только что созданный UserId, а затем извлечь его из репозитория.

например:

[HttpPost]
public ActionResult Signup(SignupViewModel model)
{
   //.. code to save.. etc

   return RedirectToAction("Confirmation", new { id = newUser.UserId });
}

[HttpGet]
public ActionResult Confirmation(int id)
{
   var user = repo.FindById(id);
   // map to model, etc...
   return View(model);
}

Таким образом, ваш URL будет (без специализированного маршрута)

http://localhost:8080/Signup/Confirmation?id=123213

Помещение адресов электронной почты пользователей в URL-адрес требует их рассылки спама.

0 голосов
/ 23 августа 2011

Вы пытались зарегистрировать маршрут в global.asax.cs?

Что-то вроде:

routes.Add("confirmation", 
    new Route("Signup/Confirmation/{email}", 
    new RouteValueDictionary(new { controller = "Signup", action = "Confirmation", email = UrlParameter.Optional }), 
    new MvcRouteHandler())
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...