語境
我注意到,在 VS 2019 中從開箱即用模板創建新的 ASP.NET Core Razor 頁面應用程式后,即使是具有最純粹模型類的最純粹的html 表單也會呈現輸出<input name="__RequestVerificationToken" type="hidden" value="...">
題
我是否遺漏了什么,并且有一個顯式屬性/陳述句指示 ASP.NET Core 添加防偽,或者現在這是默認設定?(這使得使用[AutoValidateAntiforgeryToken]過時)
...或者...
它只是<input name="__RequestVerificationToken" type="hidden" value="...">總是無條件呈現的,并且[AutoValidateAntiforgeryToken]我可以針對它打開服務器端驗證?這種情況下,如果驗證有效,我如何進行冒煙測驗?
示例代碼
@page
@model TestFormModel
@{
ViewData["Title"] = "Home page";
}
<div >
<form method="post">
<input type="text" name="myinput"/>
<input type="submit" value="Submit" />
</form>
</div>
//[AutoValidateAntiforgeryToken]
public class TestFormModel : PageModel
{
private readonly ILogger<TestFormModel> _logger;
public TestFormModel(ILogger<TestFormModel> logger)
{
_logger = logger;
}
public void OnGet()
{
}
public void OnPost()
{
}
}
uj5u.com熱心網友回復:
以前在 ASP.NET 的 .NET Framework 版本中,您確實必須選擇加入通常帶有屬性的防偽令牌。
[ValidateAntiForgeryToken]
public ActionResult Save(Product product)
{
db.Product.Add(product);
Return View();
}
在 ASPNET Core 中,這會自動包含在Form Tag Helper 中。因此,只要您的 CSHTML 包含 FORM 元素,ASPNET Core 運行時就會為您包含隱藏欄位。
默認情況下包含此內容的基礎是“約定優于配置”的口頭禪。按照慣例,80 % 的開發人員會選擇保護他們的應用程式免受 CSRF 攻擊。如果您想違反約定,您可以在ConfigureServicesStartup 類部分的約定幫助器中找到選擇退出的選項。
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages()
.AddRazorPagesOptions(options =>
{
options.Conventions
.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute());
});
}
這篇博文更詳細地介紹了 Razor Pages、選項和使用場景。
更新 - 對評論的回應
如果您閱讀 a 代碼,您可能會注意到沒有 taghelper。– g.pickardou
確實有一個標簽助手。在新的 Razor Pages 專案模板中,您可以找到包含在_ViewImports.cshtml檔案中的標簽助手:
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
我們可以驗證您<form />在 OP 中撰寫的元素是否正在呼叫 ASP.NET 標記助手,如下所示:
<form method="post">
<input type="text" name="myinput"/>
<input type="submit" value="Submit" />
</form>
如果我們在此檢查頁面源,您將看到結果
<form method="post">
<input type="text" name="myinput" />
<input type="submit" value="Submit" />
<input name="__RequestVerificationToken" type="hidden" value="{{token}}" />
</form>
現在,如果我們使用語法選擇退出單個標簽助手
<!form method="post">
<input type="text" name="myinput" />
<input type="submit" value="Submit" />
</!form>
再次檢查頁面源,我們可以清楚地看到我們已明確選擇退出此標簽助手。
<form method="post">
<input type="text" name="myinput" />
<input type="submit" value="Submit" />
</form>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/322263.html
上一篇:如何讀取DefaultHttpContext的正文?[復制]
下一篇:ASP.NETCore6WebAPI的集成測驗拋出System.InvalidOperationException
