可以使用 AJAX 到 POST 从另一个页面到 Razor 页面模型吗? (例子)

Is it OK to use AJAX to POST to a Razor page model from another page? (Example)

我尝试学习网络开发,并测试了我是否可以仅使用 Razor page/model 的 POST-side 作为 AJAX-script 来上传文件通过另一个 razor 页面,同时不将“FileUpload”页面视为一个页面。

我会删减代码,只是为了说明我的意思:

Index.cshtml

@* return false, to prevent rendering of FileUpload.cshtml *@
<form asp-page="./FileUpload" enctype="multipart/form-data" 
    onsubmit="Uploader(this);return false;" method="post">
    ...

<script>
    async function Uploader(element) {
        var result = ...

            try {
                const response = await fetch(element.action, {
                    method: 'POST',
                    body: formData
                }).then(response => response.json())
                    .then(data => ...

FileUpload.cshtml.cs

// Another code checks the file and adds errors to ModelState
public async Task<IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }
    ...

发帖后 Index.cshtml 中的示例响应:

{"file":["File type is not allowed or the signature don't match the extenstion"]}

这行得通,但我想知道这样做是否可以接受,或者在安全、性能方面是否有任何后果,是否是 bad/wrong 这样做的方式等?

感谢您的宝贵时间和帮助。

将 Razor Pages 作为端点的主要目的是生成 HTML。如果您没有 HTML 的要求,您真的应该将上传处理程序放在控制器中,尤其是当上传处理程序打算从应用程序的多个位置调用时。

关于安全问题,无论您如何创建接受它们的端点,您都应该采取与处理文件上传相同的预防措施。 Razor 页面处理程序和控制器操作之间的性能不太可能有任何显着差异。