c# - 防止用户直接调用action方法
问题描述
我有3个View
这样的:
public ActionResult Index()
{
return View();
}
public ActionResult Step2()
{
return View();
}
public ActionResult Step3()
{
return View();
}
和 3 个 HttpPost 操作
//Step 1
[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult Index(string number){}
//Step 2
[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult Step2(string number){}
//Step 3
[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult Step3(string number){}
对于HttpPost Action Method
我创建的HTML Form
每个表单,我希望用户逐步提交每个表单(step 1
-> step 2
-> step 3
)
一切正常,但我不希望用户可以去重定向domain/controller/step2
或domain/controller/step3
. 我的意思是,用户必须跟随我的路由器step 1
-> step 2
->step3
解决方案
有一些方法可以解决您的问题。实现此目的的一种方法是TempData
在重定向命令之前使用并检查TempData
. HttpGet Action Method
例如,对于您的第 2 步检查,您可以这样做:
[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult Index(string number)
{
//your business code
TempData["FirstStepDone"] = true;
// return RedirectTo()
}
public ActionResult Step2()
{
if (TempData["FirstStepDone"] == null)
//return error
return View();
}
推荐阅读
- javascript - 有没有办法让“单击此处开始”按钮位于页面底部但位于脚本标签的中心?
- mysql - 我可以检查数据库中是否存在约束违规(在生产中获取唯一的约束违规,无法在本地重现)
- c# - 我应该如何使用 Azure AD SSO 处理应用内权限?
- xamarin - iOS 相当于访问 Android 资产文件
- docker - 容器引擎是操作系统和应用程序之间的整个层,还是只是在操作系统之上运行在其他应用程序旁边的另一个应用程序?
- javascript - IE EDGE内网API请求都是get请求,没有请求体,没有响应体,
- c# - 自定义搜索组合框
- javascript - 单击“返回”按钮时,您可以阻止先前页面重新加载吗?
- kubernetes - Kubernetes 系统日志位置
- c# - 如何将多个参数传递给 Get Method 并在 .NET Core Web API 中路由它们?