使用ASP。NET Core 3.1-MVC,我有一个HTTP Post
操作方法,它从客户端获取数据并处理数据库。因为这个操作方法很长,很不整洁,而且有很多重复的代码,所以我决定简化这个操作方法,并使用Redirect to。类似这样的东西:
[HttpPost]
[ValidateAntiForgeryToken]
[Route("MainActionMethod")]
public async Task<IActionResult> MainActionMethod([FromBody]object jsonData)
{
. . .
if (condition a)
return RedirectToAction("Action1");
if (condition b)
return RedirectToAction("Action2");
. . .
}
Action1
必须是HTTPGet才能重定向,这样用户就可以键入这样的URL并修改我的数据库
http://www.example.com/?param1="Hello"¶m2="Stacky"
如何从浏览器禁用对HTTP GET Action1
的访问,并且只能通过其他操作方法或重定向到来访问?
在Request
的header
中有一个属性Referer
。如果从浏览器访问,则其值为空。使用此项来确定后续处理过程。
[HttpPost]
[ValidateAntiForgeryToken]
[Route("MainActionMethod")]
public async Task<IActionResult> MainActionMethod([FromBody]object jsonData)
{
if (true)
return RedirectToAction("Action1");
}
public IActionResult Action1()
{
StringValues header ;
Request.Headers.TryGetValue("Referer",out header);
if (header.Count==0)
{
return BadRequest();
}
return Ok("Action1");
}