2013-12-19 4 views
1

У меня есть приложение asp.net mvc web api с ember и simplemembershipprovider. Я использую шаблон ember, и с ним приложение ember создается при успешном входе пользователя в домашний контроллер.Ember + web api single page redirect

public ActionResult Index(string returnUrl) 
    { 
     if (User.Identity.IsAuthenticated) 
     { 
      return View("App"); 
     } 
     ViewBag.ReturnUrl = returnUrl; 
     return View(); 
    } 

Иногда пользователь щелкнет ссылку в сообщении электронной почты с идентификатором при посещении сайта, если URL включает в себя идентификатор, после успешного входа в систему, я хочу, чтобы перенаправить пользователя на страницу с деталями базы по предоставленному идентификатору в url. Примером может служить http://siteURL.com/#/product/1412. Мне сложно понять, как это сделать. Так как это маршрут ember на стороне клиента, MVC не проводит различия между этим маршрутом и http://siteURL.com, поэтому он просто игнорирует запрос на перенаправление. Вот что я пробовал.

  1. назначить URL в контроллере авторизации - ничего не происходит после того, как данные JSON возвращается, остается на странице входа в систему и не попал в HomeController, даже если пользователь не аутентификацией.

    FormsAuthentication.SetAuthCookie (model.UserName, model.RememberMe);
    returnUrl = "http://siteURL.com/#/product/1412";
    return Json (новый {success = true, redirect = returnUrl});

  2. использование ответа перенаправление. То же, что и # 1
    Response.Redirect (returnUrl);

  3. Назначенный адрес в домашнем контроллере, как указано выше.
    if (User.Identity.IsAuthenticated)
    {
    returnUrl = "http://siteURL.com/#/product/1412";
    return View («Приложение»);
    }
    ViewBag.ReturnUrl = returnUrl;
    возвращение Вид();

ответ

0

Большинство браузеров даже не отправляют # на сервер, поэтому вам не придется перенаправлять его. Вот несколько вариантов

  1. Не используйте хэш, не каждый браузер поддерживает его, http://emberjs.com/guides/routing/specifying-the-location-api/

  2. Дайте им фальшивый адрес, который перенаправляет, http://siteURL.com/Redirect/product/1412

  3. инъекционные, что URL в некоторые JS на странице переадресации при нагрузке