2016-10-19 2 views
0

я следующий код в частичном виде:Скрытие значений параметров в ActionLink?

<li>@Html.ActionLink("Text", "ViewName", "ViewFolder", new { param = 0 }, null)</li> 

Когда я наведите курсор мыши на ссылку, можно увидеть в браузере параметра используется

http://localhost:49781/ViewFolder/ViewName?param=0 

Есть ли способ, чтобы скрыть это информация от пользователей? Я бы не хотел, чтобы они копировали и вставляли URL-адрес и начали вводить собственные значения параметра.

Причина, по которой я использую параметр, заключается в том, что моя Модель должна знать, какую хранимую процедуру выполнить. Существует 5 ссылок, которые будут использовать одну и ту же хранимую процедуру, единственная разница - передаваемый параметр.

Существует вероятность того, что в будущем некоторые пользователи не должны видеть определенные вещи ... но если все, что им нужно сделать, это изменить номер параметра, чтобы увидеть, что должно быть скрыто, что может быть проблемой.

Кроме того, я бы не хотел PARAMS отправки, которые потенциально могут «аварии» ничего

Заранее спасибо за вашу помощь!

+0

вы можете зашифровать значение параметра, передавая его в @ HTML.ActionLink, и при принятии действия вы можете его расшифровать. поэтому пользователи будут видеть только нечитаемые значения, это может помочь http://stackoverflow.com/questions/165808/simple-two-way-encryption-for-c-sharp – Emil

+0

Посмотрите на это: http://stackoverflow.com/ Вопросы/11488442/asp-net-mvc-3-how-to-force-a-actionlink-to-do-a-httppost-вместо-в-httpge – Bene

+5

Не используйте этот подход. Решение здесь заключается не в том, чтобы запутать URL-адрес, он должен включать надлежащую авторизацию, которая запрещает людям выполнять те вещи, которые им не нужны. Просто «скрытие» параметра не остановит людей от использования этого URL-адреса. –

ответ

1

Параметры URL полезны, если пользователь хочет закладок на странице или для того, чтобы пользователи могли нажать кнопку «Назад», чтобы вернуться на страницу после того, как они прошли навигацию.

Вы можете передавать данные другими способами (через POST или файлы cookie или что-то еще), но если это - ссылка на страницу, нет необходимости.

Если они случайно связаны с вашим URL (либо намеренно, либо не копируют вставку всего URL-адреса), а система прерывается (изящно надеюсь, поэтому ваша страница 404 оформлена, имеет ссылку на домашнюю страницу и т. Д.). - если это не возиться с вашей базой данных - это абсолютно нормально! Они не должны удивляться тому, что что-то ломается, когда они возится с URL-адресом, и если они достаточно умны, чтобы понять, как правильно редактировать URL-адрес, имейте власть!

Вместо этого я просто хотел бы удостовериться, что параметр param является ожидаемым вами, а если нет, либо перерыв, либо перенаправление на действительную страницу.

Вот пример, который проверяет, является ли этот параметр действительным. Если это не так, он возвращает 404, иначе он делает некоторые вещи.

public ActionResult ViewName(int param) { 
    if (!CheckIfParamIsValid(Id)) { 
     // Do the thing you want to do, if the value is not valid, e.g. throw a page not found/404. 
     return new HttpNotFoundResult("No data found for param " + param); 
    } 
    var model = /*Go get your data using the param, knowing that it's now safe */ 
    return View(model); 
} 

/// <summary> 
/// Function to check if your param is a value you expect to receive or not 
/// </summary> 
/// <param name="param">the value you are testing, hopefully called something more descriptive than 'param')</param> 
private bool CheckIfParamIsValid(int param) { 
    //Example logic for checking if the param's between 1-5 
    return Enumerable.Range(1,5).Contains(param); 
} 
+1

Благодарим вас за образец проницательности и кода – blacksaibot

Смежные вопросы