0

OK心中已經研究和發佈此之前想盡單建議(分別當然)我每次碰了壁Asp.net MVC RETURNURL值總是空

這是我的日誌鑑於我用ViewBag來通過RETURNURL值我已經看到了很多回答這個問題

<h2>Login</h2> 
@using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { role = "form" })) 
{ 
    @Html.AntiForgeryToken() 


    ............... 

這是登錄操作的結果

[HttpPost] 
[AllowAnonymous] 
[ValidateAntiForgeryToken] 
public ActionResult Login(UserLogin login, string returnUrl="") 
{ 
    string message = ""; 
    using (NerdsContext nc = new NerdsContext()) 
    { 
     var v = nc.User.Where(a => a.email == login.email).FirstOrDefault(); 
     if (v != null) 
     { 
      if (!v.IsEmailVerified) 
      { 
       ViewBag.Message = "Please verify your email first"; 
       return View(); 
      } 
      if (string.Compare(Crypto.Hash(login.password), v.password) == 0) 
      { 
       int timeout = login.rememberMe ? 525600 : 20; // 525600 min = 1 year 
       var ticket = new FormsAuthenticationTicket(login.email, login.rememberMe, timeout); 
       string encrypted = FormsAuthentication.Encrypt(ticket); 
       var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted); 
       cookie.Expires = DateTime.Now.AddMinutes(timeout); 
       cookie.HttpOnly = true; 
       Response.Cookies.Add(cookie); 

       //Redirect the user to new url 
       if (Url.IsLocalUrl(returnUrl)) 
       { 
        ViewBag.ReturnUrl = returnUrl; 
        return Redirect(returnUrl); 

       } 
       else 
       { 
        return RedirectToAction("Nerd", "Home"); 
       } 
      } 
      else 
      { 
       message = "Invalid credential provided"; 
      } 
     } 
     else 
     { 
      message = "Invalid credential provided"; 
     } 
    } 
    ViewBag.Message = message; 
    return View(); 
} 

最後,這是我在web.confi添加的行G文件

<authentication mode="Forms"> 
     <forms cookieless="UseCookies" loginUrl="/Account/Login" timeout="30" slidingExpiration="true" protection="All"></forms> 
    </authentication> 

當我運行此我從來沒有實際的登錄它總是給我回到登錄頁面和RETURNURL的值總是空 那麼,什麼是怎麼回事????

+0

你能包括'Login' GET方法(你現在的例子只有POST方法)?如果GET操作方法結果分配URL,則存在「ViewBag.ReturnUrl」值,否則爲'ViewBag'默認值。考慮使用ViewBag.ReturnUrl = Request.QueryString [「ReturnUrl」]如果你確定從查詢字符串給出的返回的URL。 –

+0

是的我有GET操作方法public ActionResult Login(string ReturnUrl) ViewBag.ReturnUrl = ReturnUrl; return View(); }' 我會試試這個,但是我必須改變視圖中的任何東西嗎? – salRad

+0

它沒有工作:(任何其他的想法?我覺得這裏已經失去了幾天,仍然沒有找到任何解決這個沮喪的問題 – salRad

回答

0

OK多少搜索後,我發現在這裏我的答案 [Request.IsAuthenticated is always false ]

我必須在我的web.config的模塊裏面添加system.WebServer

這些線
<remove name="FormsAuthentication" /> 
     <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />