Параметры, переданные из углового 7 в мой основной контроллер WebApi Asp.net, являются нулевыми - PullRequest
1 голос
/ 28 сентября 2019

У меня есть этот код ниже, и я хочу передать два параметра из приложения Angular 7 в мой контроллер Asp.Net Core WebApi, я просто не знаю синтаксис пост-вызова Angular http в контроллер.Контроллер получает все нулевые значения при нажатии.Но я могу передать в модели, она работает просто отлично!

Вопрос - вот что я не понимаю.Когда я передаю модель, подобную этой,

[HttpPost("confirm")]
public async Task<IActionResult> ConfirmEmail(EmailConfirmationOptions options) {}

, и мой пост также передается в модели, как эта.Это работает!

const model = {UserId: userId, Code: code };
return this.http.post(this.baseUrl + 'confirm', model);

Вот мой Angular-вызов, в котором я пробовал разные значения, но ни одно из них, похоже, не передает их правильно.

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 и код приходит в ноль

[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");
    } 
}

1 Ответ

1 голос
/ 29 сентября 2019

Если запрос на стороне клиента выглядит следующим образом

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
}

Ссылка Маршрутизация к действиям контроллерав ASP.NET Core

Если контроллер имеет атрибут [ApiController], попробуйте явно указать, куда должны быть привязаны данные

[HttpPost("confirm/{userId}/code/{code}")]
public async Task<IActionResult> ConfirmEmail([FromRoute]string userId, [FromRoute]string code) {
    //...omitted for brevity
}

Ссылка Связывание модели в ASP.NET Core

...