【发布时间】:2021-02-03 21:39:36
【问题描述】:
我正在尝试将电子邮件内容发布到 Razor 处理程序,但请求值似乎没有正确绑定。我一直在尽我所能(包括许多关于 SO 的问题)寻找答案,但没有运气。
我从“网络”选项卡中可以看出,该代码正确地发送了数据。我在处理程序中的断点被命中,但请求具有空值。 (我正在运行 .NET Core 3.0,值得。)
我试过了:
- 将
Content-Type添加到fetch标头 - 在请求参数中添加
[FromBody]属性 - 将正文作为对象发送而不是序列化
- 将
List<int>更改为int[] - 将我的请求类属性更改为小写、驼峰等,以防我的默认 SerializerSettings 中有不同的 ContractResolver
我的代码和一些截图如下。任何建议/答案表示赞赏。
JS
//sample data
const To = "stack@overflow.com";
const Body = "This is the email body.";
const Subject = "Hello world!";
const PortraitId = 17;
const FileIds = [1,2,3];
const body = { PortraitId, To, Subject, Body, FileIds };
const handler = "SendEmail";
const url = new URL(window.location.href.split('?')[0]);
const parameters = { handler };
url.search = new URLSearchParams(parameters).toString();
await fetch(url, {
method: "POST",
body: JSON.stringify(body),
headers: {
"RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val()
}
});
C#
public class SendEmailRequest
{
public int PortraitId { get; set; }
public string To { get; set; }
public string Subject { get; set; }
public string Body { get; set; }
public List<int> FileIds { get; set; }
}
public async Task<IActionResult> OnPostSendEmail(SendEmailRequest request) {
//do stuff
}
【问题讨论】:
-
不是为了让你远离
fetch,但你可以使用jQuery$.ajax(...)POST 来测试数据是否被发送到服务器吗?我几乎只将它用于我所有的 POST 调用;发现它更灵活。如果您需要帮助,请告诉我
标签: javascript c# ajax razor fetch