MVC 5 c#隐藏url参数

时间:2017-03-03 03:11:13

标签: c# asp.net-mvc

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}) });
    }
}

大家好我是mvc5 c#的新手,我在反击这个问题我想要隐藏我的url参数。任何可以帮助我感谢你提前

这是我的代码:

constructor(props) {
    super(props);
    ...
    this.state = {
        calls: List(),
    };
}

This is i want to hide

2 个答案:

答案 0 :(得分:1)

除非您想要使用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 :(得分:0)

如果您想有效地隐藏客户端Url中的内容,您需要找到一种方法来屏蔽它,或者将其存储在服务器上的某个位置,以便在下一次请求时捕获。

有很多地方可以将这些数据存储在您的服务器上,但实际上显而易见的是。

  1. Cookies
  2. TempData
  3. 现在TempData似乎是明显的选择,因为它会在请求中持续存在,并在访问时从TempData清除。这也是它的垮台,假设您在TempData方法中设置了SingUpIn,然后返回我假设的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 });
    }