0

MVC を使用してアップロード コントローラー メソッドを保護しようとしていますが、投稿に含めるValidateAntiForgeryToken方法を見つけるのに苦労しています。__RequestVerificationToken

私の行動は次のようなものです:

[HttpPost, ValidateAntiForgeryToken]
public ActionResult FileUpload(HttpPostedFileBase qqfile)

アップローダのドキュメントを調べてみると、qq コードの外部にアクセスして、生成されたフォームを操作できる公開されたフックは見つかりませんでした。

他の誰かがこれを機能させることができましたか?

フォーム作成用のソース ファイルを編集した後、私のリクエストはまだ検証に合格していません。

リクエスト

http://localhost:54275/UserProfile/FileUpload?qqfile=266758_10150696082935268_8163320_o.jpg

Host: localhost:54275
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
X-Requested-With: XMLHttpRequest
X-File-Name: 266758_10150696082935268_8163320_o.jpg
Content-Type: application/octet-stream
X-Mime-Type: image/jpeg
Referer: http://localhost:54275/UserProfile/Edit
Content-Length: 625352
Cookie: __test=1; RememberMe=-1167340540^1#-5833880764017141030; __RequestVerificationToken=BEIHblTcEaCio_1_i6bJnSYmituqQfq9y2ge63T85w15pAhbPldPZqY8DhLTubmtmd9OLtAuJcHdmfaFHSbn1L7oAYAtxDJWdMOOzNrddhU1; DotNetOpenAuth.WebServerClient.XSRF-Session=O-l5-Hv0flYqKL27j0TGhA; .ASPXAUTH=52C5EDFB92A09FA0395676E23BE1EBBBF03D3E88EF7C81761B76C1C8EF67936C0D9FBFD730ED77B0246C49757828A7C17D0DD7644A1C50988ECFF4C3DEDF15783E5FD7C4BA97E484F9FD6460EB6A5310E27453B461E320D10E74A5F8AEE1C0A5B1367D0DB4060958B48DACB12E80AA23; TCSESSIONID=D9016B850A1BCFD6921E274467F52CEE
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Fiddler-Encoding: base64
4

2 に答える 2

1

私はバージョン 5.11.10 の FineUploader を使用しています (前述の Valum の FileUploader FineUploader の履歴の名前を変更します)。フォームを指定する機能が含まれています。フォーム オプションを参照してください。

フォームに他のフォーム値が含まれていない場合の AntiForgeryToken 検証を使用した FineUpload の例は、AntiForgeryToken を使用して何らかの ID (以下の例では testForm) を持つフォームを含めることです。

@using (Html.BeginForm(MVCHelpers.Bank.Transactions.UploadFile(), FormMethod.Post, new { id = "testForm" }))
{
    @Html.AntiForgeryToken()
}

また、FineUploader で、送信する必要があるフォームも指定します。

<div id="fileUploadContainer"></div>
<script>
    var uploader = new qq.FineUploader({
        element: document.getElementById("fileUploadContainer"),
        ...
        form: {
            element: "testForm",
            autoUpload: true
        }
    });
</script>

これにより、アクションで [ValidateAntiForgeryToken] と組み合わせてファイルをアップロードできます。アップロードが他のフォーム値の一部である場合、そのフォームの ID を指定することで、実際のフォームを指定することもできます。フォーム要素を設定するとき、autoUpload はデフォルトで false であるため、true に注意してください。

于 2017-01-05T18:34:33.200 に答える