可以使用 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 页面处理程序和控制器操作之间的性能不太可能有任何显着差异。
我尝试学习网络开发,并测试了我是否可以仅使用 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 页面处理程序和控制器操作之间的性能不太可能有任何显着差异。