2017-03-03 241 views
-1

MVC 5 C#隱藏URL參數

$.ajax({ 
 
      type: "POST", 
 
      url: "@Url.Action("SignInUp")", 
 
      data: JSON.stringify({ email_add: email_add ,}), 
 
      contentType: "application/json; charset=utf-8", 
 
      success: function (response) { 
 
       
 
       if (response.result == 'SignUp') { 
 
        alert("Opp`s its look like you dont have an access for this website"); 
 
        window.location = response.Urls; 
 
       } 
 
       else 
 
       { 
 
        alert("Success fully login"); 
 
        window.location = response.Url; 
 
       } 
 

 
      } 
 
     });

嗨,大家好我真的在mvc5 C#新我在櫃檯這個問題我想隱藏我的網址參數。任何可以幫助我謝謝你提前

這是我的代碼:

public ActionResult SingInUp(string email_add) 
{ 
    bool obj = db.tblUsers.Any(x => x.email_add.Equals(email_add)); 
    if (obj) 
    { 
     tblUser user = db.tblUsers.Single(x => x.email_add == email_add); 
     Session["email_add"] = user.email_add; 
     Session["fname"] = user.fname; 
     Session["lname"] = user.lname; 
     return Json(new { result = "Redirect", Url = Url.Action("Check", "ProjectV3") }); 
    } 
    else 
    { 
     return Json(new { result = "SingUp", Urls = Url.Action("SignUp", "ProjectV3", new { email_add = email_add}) }); 
    } 
} 

This is i want to hide

+1

你不能。如果它不在url中,你認爲這個值會被髮送到服務器。 –

+4

但是,您返回'JsonResult'的事實表明這是一個ajax調用,爲什麼不把它作爲一個POST並將其發送到身體? –

+0

你能提供一個例子,以便我能理解你的觀點 – Newbie

回答

0

如果您想有效地隱藏客戶端Url中的內容,您需要找到一種方法來屏蔽它,或將其存儲在服務器上的某個位置,以便在下一次請求時捕獲。

有很多地方可以將這些數據存儲在您的服務器上,但真的很明顯。

  1. Cookies
  2. TempData

現在TempData似乎是顯而易見的選擇,因爲它仍然存在跨請求和訪問時從TempData清除。這也是它的缺點,可以說你在SingUpIn方法中設置TempData,然後返回我假設的JsonResul然後通過JavaScript使用重定向。然後你重定向到這個頁面,然後取出後續刪除的TempData字典的值。因此,如果該人員在SingUp頁面結束,並且由於某些原因決定刷新該頁面,則不會再次找到TempData中的值。

現在可以通過在每次讀取時重置TempData屬性來處理此問題。所以基本上你讀了TempData項目,然後你重新分配TempData條目。

這裏是一些非常基本的代碼,[基本上]工作,並不顯示電子郵件的網址。

public ActionResult SignUpIn(string email_acct) 
{ 
    //pretend i tested for a real user 
    TempData["email_acct"] = email_acct; 
    var r = new { result = "SingUp", Urls = Url.Action("SingUp") }; 
    return Json(r); 
} 

public ActionResult SingUp() 
{ 
    if (!TempData.ContainsKey("email_acct")) 
    { 
     //no temp data email.. maybe redirect.. who knows!! 
     return RedirectToAction("Index"); 
    } 

    //read the temp data entry.. 
    string emailAcct = TempData["email_acct"].ToString(); 

    //reset the temp data entry 
    TempData["email_acct"] = emailAcct; 

    return View(new SingUpModel { EmailAccount = emailAcct }); 
} 
0

除非你想去POST而不是URL參數你被卡住。如果你只是想隱藏一些實現細節,你可以編碼參數來混淆它的含義。

return Json(new { result = "SingUp", Urls = Url.Action("SignUp", "ProjectV3", new { email_add = Base64Encode(email_add)}) }) 

...

public static string Base64Encode(string plainText) { 
     var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText); 
     return System.Convert.ToBase64String(plainTextBytes); 
    } 

你最終會像一個網址:http://localhost:1126/ProjectV3/SignUp?email_add=cGtleWJpcmQ5NUBnbWFpbC5jb20=。你顯然可以改變參數的名字來隱藏它的意圖。

+1

OP想隱藏查詢字符串 –

+3

是的,正如人們所說,你不能,所以我提供了一個替代 – Daniel

+0

它可以解密viewbag電子郵件,因爲我想製作一個可以看到信息並可以保存在我的數據sql – Newbie