2017-03-03 25 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#で新しいI`mと私はカウンターで、この問題は、私は私のURLパラメータを非表示にします。任意のは、私が事前

をありがとう助けることができる、これは私のコードです:あなたはPOSTではなく、URLパラメータあなたが立ち往生しているに行きたい場合を除き

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の項目を再割り当てします。

[基本的に]動作し、URLに電子メールを表示しない非常に基本的なコードです。

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

。実装の詳細を隠すだけの場合は、パラメータをエンコードしてその意味をわかりにくくすることができます。 http://localhost:1126/ProjectV3/SignUp?email_add=cGtleWJpcmQ5NUBnbWFpbC5jb20=

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

あなたのようなURLで終わるでしょう。あなたは明らかにその意図を隠すためにパラメータの名前を変更することができます。

+1

OPクエーストリングを非表示にしたい –

+3

はい、私は代替を提供しています – Daniel

+0

私は情報を見ることができ、私のデータSQLで保存することができますフォームを作成したいので、それは 'viewbagの電子メールを復号化するのOK – Newbie

関連する問題