[英]Setting a form's action manually, no Antiforgery is auto-injected
當我手動設置action
屬性時,“Antiforgery”元素/令牌丟失(不是自動生成/注入的)
部分視圖中的代碼(部分)
<form action="?handler=edit" method='post' enctype='multipart/form-data'>
<label asp-for="Product.Id">Art.Nr</label>
<input asp-for="Product.Id" type="text" />
<input type='submit' value='Save' />
</form>
渲染代碼(客戶端)
<form action="?handler=edit" method='post' enctype='multipart/form-data'>
<label for="Product_Id">Art.Nr</label>
<input type="text" id="Product_Id" name="Product.Id" />
<input type='submit' value='Save' />
</form>
但是當我省略action
時,它會被創建(在客戶端中呈現代碼)。
<form method='post' enctype='multipart/form-data'>
<label for="Product_Id">Art.Nr</label>
<input type="text" required id="Product_Id" name="Product.Id" />
<input type='submit' value='Save' />
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8M6B..." />
</form>
這是默認行為嗎,如果想手動設置action
,還需要手動添加“防偽”元素嗎?
一張紙條
如果使用標簽助手,例如asp-page-handler
,它會起作用,並且會注入“防偽”元素,但由於我在發布時使用了不同的路徑,所以我無法使用它。
搜索了一個小時后(急於妥善解決我的問題:),我在文檔中找到了這篇文章/部分:
HTML 表單元素的防偽標記的自動生成發生在
<form>
標記包含method="post"
屬性並且以下任一情況為真時:
- action 屬性為空 (
action=""
)。- 未提供 action 屬性 (
<form method="post">
)。
這意味着如果手動設置action
,“防偽”元素不會自動注入。
這里有幾 (3) 種方法可以手動注入它:
asp-antiforgery="true"
添加到form
元素form
元素中添加@Html.AntiForgeryToken()
@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Xsrf
到視圖和<input id="__RequestVerificationToken" type="hidden" value="@Xsrf.GetAndStoreTokens(Context).RequestToken" />
在form
元素中允許自定義操作/處理程序和自動注入的“防偽”元素的另一個選項是設置submit
元素的formaction
屬性,在我的例子中為formaction="?handler=edit"
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.