c# - 如何在 Blazor 应用程序中从 Http.PutAsJsonAsync 传递多个字符串值
问题描述
我需要发布两个字符串值以在数据库中添加公司。在这里,我将 PUT 写为
await Http.PutAsJsonAsync($"api/B2CUsers/company/invitation/add/{UtpID}/{User.email}",UtpID,User.email);
我收到一个错误 User.email
,上面写着cannot convert string to System.Text.Json.JsonSerializerOptions
.
控制器功能:
[HttpPut("company/invitation/add/{utpid}/{emailAddressInvitedUser}")]
public async Task<int> AddUserCompanyInvitationAsync(string utpid, string emailAddressInvitedUser)
{
string userid = GetCurrentUser();
return await _iB2CUserServiceRepository.AddUserCompanyInvitation(userid, utpid, emailAddressInvitedUser);
}
解决方案
正确的函数签名是
[HttpGet("company/invitation/add2/{utpid}/{emailAddressInvitedUser}")]
public Task<int> AddUserCompanyInvitationAsync([FromRoute] string utpid, [FromRoute] string emailAddressInvitedUser)
如果您不添加 [FromRoute] 属性,.NET 不会将路由值映射到您的变量。
请记住,此类请求将记录在 Web 服务器日志中。这意味着电子邮件地址将在日志中可见。您还需要使用HttpUtility.UrlEncode转义电子邮件字符串
curl -X PUT "http://localhost:14786/company/invitation/add2/45/test%40test.com" -H "accept: text/plain"
首选的方法是在正文中传递 Json 请求。
public class AddUserRequest
{
public int utpid { get; set; }
public string emailAddressInvitedUser { get; set; }
}
public class AddUserResponse
{
public int uid { get; set; }
}
[HttpPut("company/invitation/add1")]
public Task<AddUserResponse> AddUserCompanyInvitationAsync([FromBody]AddUserRequest addUserRequest)
{
Console.WriteLine(addUserRequest.utpid);
Console.WriteLine(addUserRequest.emailAddressInvitedUser);
return Task.FromResult(new AddUserResponse() { uid = 1 });
}
并为客户
var client = new HttpClient();
int id = 45;
string email = "test@test.com";
await client.GetAsync($"http://localhost:14786/company/invitation/add2/{id}/{System.Web.HttpUtility.UrlEncode(email)}");
var response = await client.PutAsJsonAsync("http://localhost:14786/company/invitation/add1", new AddUserRequest() { utpid = id, emailAddressInvitedUser = email });
而不是 PUT 使用 POST
推荐阅读
- django - 为什么Django在继承父模型的应用程序时会在它们中创建迁移?
- java - 为什么我的 jPanel 不显示来自 Java FX 的嵌入 webView?
- html - 如何停止将多字链接放在一个新行上,而不是像常规文本一样将它们分开?
- python-3.x - 如何使用 Python 在 Appium 测试中滚动/滑动?
- java - 多模块(pom)和java模块系统的区别
- c# - GetSection.Bind 在 .NET 4.7.2 中不起作用
- sql-server - 使用无效对象名称添加过程和错误的问题
- azure-ad-b2c - Azure B2C Microsoft 登录页面未与 ADA 规则确认
- python - 创建具有多个子文件夹的文件夹
- regex - 如何从 OpenCart 3.0 上的所有链接中删除 route=