ASP .NET MVC如何使POST看起来像POST而不是GET

时间:2011-07-03 18:01:19

标签: asp.net-mvc url

通常情况下,我有以下链接:

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

等等。 这让我非常沮丧,因为一些聪明的用户可能只是自己重新发明链接并获取一些数据,这是不可取的。我知道我可以在服务器端设置安全性,但我想使链接看起来像:

http://domain.com/action

'some'和'foo'发送像POST请求

3 个答案:

答案 0 :(得分:1)

ASP.NET MVC中的操作在涉及操作的参数方面不区分Postweed和Get。但是,您可以首先使用属性[HttpPost]标记您的操作。这会将请求选项限制为仅发布。

现在到第二个“问题”,你需要更改所有链接以便使用post而不是get,你可以使用ajax来执行此操作,在jQuery中查看$.post

这并不能解决您的参数的任何安全问题,如果您在查询字符串中显示它或通过post发送它通常无关紧要。如果有人想在你的后期数据中注入一些东西,那就不是火箭科学了。

答案 1 :(得分:1)

你必须把它包装成一个表格才能发挥作用;输入被隐藏。在服务器端,您必须将操作限制为仅响应POST请求。但是,这并没有真正解决您的问题,因为一个足够感兴趣且知识渊博的用户可以轻松地将POST设置为GET。

答案 2 :(得分:0)

您可以在视图中添加表单,并为帖子后面的模型应用[HttpPost]属性。

将表单添加到剃刀视图中(您还需要一个按钮或指向sumbit的链接):

@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”值。