为什么 OnPost 在 ASP.NET 核心版本 5.0 中没有 "@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers" 就不会被击中
Why OnPost is not getting hit without "@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers" in ASP.NET Core version 5.0
我正在使用 ASP.NET CORE 5.0 版,并且我正在为我的网站使用 razor 页面 UI。我在 HTML:
中使用具有以下结构的简单 OnPost 方法时遇到问题
@page
@model EmptyOne.Web.Pages.SaysHelloModel
@{
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Search</title>
</head>
<body>
<p>Enter the name you wanna say hello two ;)</p>
<form method="post">
Search term:
<input name="nameToHello" />
<input type="submit" />
</form>
@* some logic to say hello if model is not null... *@
</body>
</html>
这是我的页面模型class:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace EmptyOne.Web.Pages
{
public class SaysHelloModel : PageModel
{
public string guysName { get; set; }
public void OnGet()
{
}
public IActionResult OnPost(string nameToHello)
{
guysName = nameToHello;
return Page();
}
}
}
当我尝试点击它时,它 returns 一个 HTTP 400 状态核心和一个空白页面,但由于某种原因,当我添加这个助手时:
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
工作正常!
最终和工作视图(我没有更改页面模型中的任何内容 class):
@page
@model EmptyOne.Web.Pages.SaysHelloModel
@{
}
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Search</title>
</head>
<body>
<p>Enter the name you wanna say hello two ;)</p>
<form method="post">
Search term:
<input name="nameToHello" />
<input type="submit" />
</form>
@* some logic to say hello if model is not null... *@
</body>
</html>
谁能给我解释一下这是为什么?我查找了一个 ASP.NET 核心版本 5.0 代码示例并看到了这个助手。我是否以任何方式使用这个助手?它与向我的页面处理程序发送 HTTP post 请求有什么关系?
Razor Pages 包含一个 anti-CSRF mechanism, known as request verification, by default. It relies on a token that is applied to a hidden form field being sent with each POST request. The hidden form field is generated automatically by the form tag helper。如果您从 post 中省略令牌值,例如通过禁用表单标签助手,框架 returns 一个 400 Bad Request。
我正在使用 ASP.NET CORE 5.0 版,并且我正在为我的网站使用 razor 页面 UI。我在 HTML:
中使用具有以下结构的简单 OnPost 方法时遇到问题@page
@model EmptyOne.Web.Pages.SaysHelloModel
@{
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Search</title>
</head>
<body>
<p>Enter the name you wanna say hello two ;)</p>
<form method="post">
Search term:
<input name="nameToHello" />
<input type="submit" />
</form>
@* some logic to say hello if model is not null... *@
</body>
</html>
这是我的页面模型class:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace EmptyOne.Web.Pages
{
public class SaysHelloModel : PageModel
{
public string guysName { get; set; }
public void OnGet()
{
}
public IActionResult OnPost(string nameToHello)
{
guysName = nameToHello;
return Page();
}
}
}
当我尝试点击它时,它 returns 一个 HTTP 400 状态核心和一个空白页面,但由于某种原因,当我添加这个助手时:
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
工作正常!
最终和工作视图(我没有更改页面模型中的任何内容 class):
@page
@model EmptyOne.Web.Pages.SaysHelloModel
@{
}
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Search</title>
</head>
<body>
<p>Enter the name you wanna say hello two ;)</p>
<form method="post">
Search term:
<input name="nameToHello" />
<input type="submit" />
</form>
@* some logic to say hello if model is not null... *@
</body>
</html>
谁能给我解释一下这是为什么?我查找了一个 ASP.NET 核心版本 5.0 代码示例并看到了这个助手。我是否以任何方式使用这个助手?它与向我的页面处理程序发送 HTTP post 请求有什么关系?
Razor Pages 包含一个 anti-CSRF mechanism, known as request verification, by default. It relies on a token that is applied to a hidden form field being sent with each POST request. The hidden form field is generated automatically by the form tag helper。如果您从 post 中省略令牌值,例如通过禁用表单标签助手,框架 returns 一个 400 Bad Request。