Gewusst wie: ausblenden der Query-string-parameter in der URL

Ich habe eine Telerik grid in dem ich mich mit client-Vorlagen Bearbeiten/löschen Aktionen für jeden Datensatz. Also für den Bearbeiten - /löschen-Aktion, die ich brauchen, um passieren die id des Datensatzes zusammen mit der URL, hier in diesem Fall bin ich erschrocken über einige Fragen der Sicherheit. Ich bin auf der Suche nach einem Weg zu verbergen die query-string-parameter zu überwinden diese Probleme.

Ich bin mir bewusst über die Verschlüsselung des Parameters und momentan benutze ich das. Aber ich will vollständig zu verbergen die query-string-parameter. Ich kann nicht mit session/ViewBag hier, da kann ich nicht die session-Wert für jeden Datensatz in der Zeit von button und klicken Sie auf Zugriff im controller.

Jede Hilfe ist willkommen. Vielen Dank im Voraus. mein Controller-und View-codes sind die folgenden

Ansicht

@model IEnumerable<Data.Models.MyViewModel>
@{
Volunteer.Data.User currentUser = (Data.User)Session["CurrentUser"];
}
<div id="myDivId">
<p style="clear:none;">
@Html.ActionLink("Add", "Create", "MyController", new { area = "", ID = ViewBag.MyDataID }, new { @class = "aMyClass" })
</p>
@{
Html.Telerik().Grid<MyViewModel>().Name("MyGrid")
.Columns(col =>
{
col.Bound(c => c.FirstName).Width("120px");
col.Bound(c => c.LastName).Width("80px");
col.Bound(c => c.Designation).Width("80px");
col.Bound(c => c.Company).Width("80px");
col.Bound(c => c.Married).Filterable(false).ClientTemplate(
"<input type='checkbox'" + "<#= Married?\"checked\":\"\" #>" + " OnClick='return false' />"
).Width("40px");               
if (currentUser.AdminRole == true || currentUser.Manager == true || currentUser.StaffRole == true)
{
col.Bound(c => c.EmployeeID).Sortable(false).ClientTemplate(
"<a href='" + Url.Content("~/MyController/Edit/") + "<#= EmployeeID #>' title='Edit Employee Details' class='edit'>Edit</a>" +
"<a href='" + Url.Content("~/MyController/Delete/") + "<#= EmployeeID #>' title='Delete Employee Details' class='delete'>Delete</a>"
).Title("Action").Width("75px");
}
else
{
col.Bound(c => c.EmployeeID).Sortable(false).ClientTemplate(
"<a href='" + Url.Content("~/MyController/Details/") + "<#= EmployeeID #>' title='Associated Party Details' class='details'>Details</a>"
).Title("Action").Width("75px");
}
})
.DataBinding(dataBinding => dataBinding.Ajax().Select("_GetEmployeeList", "MyController", new { id = "MyDataID" }))
.Pageable()
.Sortable()        
.Render();
}
</div>

Controller

public ActionResult Edit(int id)//Want to pass this id without using Query string parameter
{
User user = (User)Session["CurrentUser"];
Employee employee = db.Employees.Single(c => c.EmployeeID == id);
//some code
return View(employee);
}
[HttpPost]
public ActionResult Edit(Employee employee)
{
User user = (User)Session["CurrentUser"];
if (ModelState.IsValid)
{
db.Employees.Attach(employee);
db.ObjectStateManager.ChangeObjectState(Employees, EntityState.Modified);
db.SaveChanges();
return RedirectToAction("Index");
}
Employee employee = db.Employees.Single(c => c.EmployeeID == id);
//some code
return View(employee);
}
  • Tun Sie wirklich brauchen, um es zu übergeben, die als Teil der URL? Kannst du nicht ein POST-request statt?
  • Wie kann ich mit einer POST-Anforderung hier? schauen Sie bitte auf meine controller-code. Ich brauche navigieren Sie zu einer anderen Ansicht von der Aktion Bearbeiten und Benutzer übernehmen Sie die änderungen dann in da bin ich mit post-Anforderung, um die änderungen zu Speichern. Dann navigieren Sie zurück in das Netz. Dies ist der Fluss der Betrieb hier
  • Security through obscurity is no security at all. Anstatt es zu verbergen, Sie sollte die Authentifizierung der Benutzer und die überprüfung, dass Sie die entsprechende Rolle/Berechtigung zum anzeigen oder Bearbeiten der Mitarbeiter. So kann jeder sehen, aber die Url kann niemand verwenden Sie es in böser Absicht.
InformationsquelleAutor Rameez | 2015-05-25
Schreibe einen Kommentar