通常情况下,我有以下链接:
http://domain.com/action?some=1&foo=2
等等。 这让我非常沮丧,因为一些聪明的用户可能只是自己重新发明链接并获取一些数据,这是不可取的。我知道我可以在服务器端设置安全性,但我想使链接看起来像:
http://domain.com/action
'some'和'foo'发送像POST请求
答案 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”值。