从 angular 7 传递到我的 Asp.net 核心 WebApi 控制器的参数都是空的
Parameters passed from angular 7 to my Asp.net core WebApi controller are all null
我在下面有这段代码,我想将两个参数从 Angular 7 应用程序传递到我的 Asp.Net 核心 WebApi 控制器,我只是不知道 Angular http post 调用控制器。控制器在被击中时获取所有空值。但我可以传入一个模型,它工作得很好!
问题 - 这是我不明白的地方。当我传入这样的模型时
[HttpPost("confirm")]
public async Task<IActionResult> ConfirmEmail(EmailConfirmationOptions options) {}
并让我的 post 也通过一个模型,就像这样。有效!
const model = {UserId: userId, Code: code };
return this.http.post(this.baseUrl + 'confirm', model);
这是我的 Angular 调用,我尝试了不同的值,但 none 似乎正确传递了它们。
confirm(userId: number, code: string) {
// return this.http.post(this.baseUrl + 'confirm, { userId, code });
// return this.http.post(this.baseUrl + 'confirm/' + userId + '/code/' + code, {});
return this.http.post(this.baseUrl + 'confirm', userId);
}
这是我的控制器,其中 userId 为 0,code 为 null
[AllowAnonymous]
//[HttpPost("confirm")]
//[HttpPost("{id}/{code}", Name = "confirm")]
// [HttpPost("{userId}", Name = "confirm")]
[HttpPost("confirm")]
public async Task<IActionResult> ConfirmEmail(string userId, string code)
{
if (userId == null || code == null)
{
return BadRequest("error");
}
var user = await _userManager.FindByIdAsync(userId);
if (user == null) {
return BadRequest("error");
}
// code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code));
var result = await _userManager.ConfirmEmailAsync(user, code);
if (result.Succeeded) {
return Ok();
} else {
return BadRequest("error");
}
}
如果客户端请求是这样的
return this.http.post(this.baseUrl + 'confirm/' + userId + '/code/' + code, {});
服务器上的路由模板需要与预期路由匹配
[HttpPost("confirm/{userId}/code/{code}")]
public async Task<IActionResult> ConfirmEmail(string userId, string code) {
//...omitted for brevity
}
引用Routing to controller actions in ASP.NET Core
如果控制器具有 [ApiController]
属性,则尝试明确说明数据从何处绑定
[HttpPost("confirm/{userId}/code/{code}")]
public async Task<IActionResult> ConfirmEmail([FromRoute]string userId, [FromRoute]string code) {
//...omitted for brevity
}
我在下面有这段代码,我想将两个参数从 Angular 7 应用程序传递到我的 Asp.Net 核心 WebApi 控制器,我只是不知道 Angular http post 调用控制器。控制器在被击中时获取所有空值。但我可以传入一个模型,它工作得很好!
问题 - 这是我不明白的地方。当我传入这样的模型时
[HttpPost("confirm")]
public async Task<IActionResult> ConfirmEmail(EmailConfirmationOptions options) {}
并让我的 post 也通过一个模型,就像这样。有效!
const model = {UserId: userId, Code: code };
return this.http.post(this.baseUrl + 'confirm', model);
这是我的 Angular 调用,我尝试了不同的值,但 none 似乎正确传递了它们。
confirm(userId: number, code: string) {
// return this.http.post(this.baseUrl + 'confirm, { userId, code });
// return this.http.post(this.baseUrl + 'confirm/' + userId + '/code/' + code, {});
return this.http.post(this.baseUrl + 'confirm', userId);
}
这是我的控制器,其中 userId 为 0,code 为 null
[AllowAnonymous]
//[HttpPost("confirm")]
//[HttpPost("{id}/{code}", Name = "confirm")]
// [HttpPost("{userId}", Name = "confirm")]
[HttpPost("confirm")]
public async Task<IActionResult> ConfirmEmail(string userId, string code)
{
if (userId == null || code == null)
{
return BadRequest("error");
}
var user = await _userManager.FindByIdAsync(userId);
if (user == null) {
return BadRequest("error");
}
// code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code));
var result = await _userManager.ConfirmEmailAsync(user, code);
if (result.Succeeded) {
return Ok();
} else {
return BadRequest("error");
}
}
如果客户端请求是这样的
return this.http.post(this.baseUrl + 'confirm/' + userId + '/code/' + code, {});
服务器上的路由模板需要与预期路由匹配
[HttpPost("confirm/{userId}/code/{code}")]
public async Task<IActionResult> ConfirmEmail(string userId, string code) {
//...omitted for brevity
}
引用Routing to controller actions in ASP.NET Core
如果控制器具有 [ApiController]
属性,则尝试明确说明数据从何处绑定
[HttpPost("confirm/{userId}/code/{code}")]
public async Task<IActionResult> ConfirmEmail([FromRoute]string userId, [FromRoute]string code) {
//...omitted for brevity
}