2017-03-03 244 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