ASP .NET MVC Как сделать URL, который выглядит как POST, а не GET - PullRequest
0 голосов
/ 03 июля 2011

Так что обычно у меня есть ссылки вроде:

http://domain.com/action?some=1&foo=2

и так далее. Это меня очень расстраивает, так как некоторые умные пользователи могут просто заново изобрести ссылку и получить доступ к некоторым данным, что нежелательно. Я знаю, что могу настроить безопасность на стороне сервера, но я бы хотел, чтобы ссылки выглядели так:

http://domain.com/action

И 'some' и 'foo' отправляют как POST-запрос

Ответы [ 3 ]

1 голос
/ 03 июля 2011

Вы должны обернуть его в форму, чтобы он работал;с входами скрыты.На стороне сервера вы должны ограничить действие только ответом на запрос POST.Тем не менее, это не решит вашу проблему, так как достаточно заинтересованный и знающий пользователь может так же легко создать POST, как и GET.

1 голос
/ 03 июля 2011

Действия в ASP.NET MVC не различают между Post и Get, что касается параметров к действиям. Однако вы можете начать с пометки ваших действий атрибутом [HttpPost]. Это ограничит параметры запроса только для публикации.

Теперь ко второй «проблеме», вам нужно изменить все ваши ссылки, чтобы вы использовали post вместо get, вы можете сделать это, используя ajax, для этого посмотрите $.post в jQuery. .

Это не решает никаких проблем безопасности с вашими параметрами, хотя, как правило, не имеет значения, если вы показываете его в строке запроса или его отправляет post. Если кто-то хочет внедрить что-то в ваши пост-данные, это не ракетостроение.

0 голосов
/ 05 июля 2011

Вы можете добавить форму в представление и применить атрибут [HttpPost] для действия, которое будет выполнять модель после публикации.

Добавление формы в представление бритвы (также вам понадобится кнопка или ссылкасуммировать):

@using (Html.BeginForm("SomeAction", "SomeController", FormMethod.Post, new { @id = "someFormId" }))
{
    @Html.HiddenFor(model => model.some)
    @Html.HiddenFor(model => model.foo)
}

А вот контроллер с действием для обработки вашего сообщения:

public class SomeController : Controller
{
    [HttpPost]
    public ActionResult SomeAction(SomeModel model)
    {
        //process 'some' and 'foo' here
        return View(model);
    }
}

Для повышения безопасности вы можете легко зашифровать / расшифровать «некоторые» и «foo»значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...