Как передать параметр в HTTP Get метод из. Net Core + React - PullRequest
0 голосов
/ 28 апреля 2020

Мы создали базовый проект веб-API. Net с шаблоном React & redux. Теперь мы хотели вызвать метод Http Get, который содержит параметр. Я новичок, чтобы реагировать и концепции API, так как это сделать? Я попытался, как в следующем, он не работает должным образом или всегда показывает ошибку 401 или 415. Где я go ошибся?

Реагировал с Ax ios,

var getaproveUserDetails = axios.
    get("/users/getapprove", {
        params: { email: EmailOfUser }
    }

    ).then(function (response) {
        var res = response.json();
        console.log("response", 'res: ' + res.message, response.message);
    })
    .catch(function (error) {
        console.log("error", error);
    });

Мой метод API,

    [AllowAnonymous]
    [HttpGet("getapprove/{email}")]
    public async Task<IActionResult> GetApprove([FromQuery]string Email)
    {
           if (Email == null)
                return BadRequest("Email is Null!.");

            var user = _userService.GetByEmail(Email);
            if (user == null)
                return NotFound();

            return Ok(user);
     }

Мой маршрут контроллера,

[Authorize]
[Route("[controller]")]
public class UsersController {...    ...

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Сначала вы изменили маршрут запроса на [HttpGet("getapprove/{email}")], поэтому вам нужно вызвать это действие API по этому маршруту: "/users/getapprove/"+ EmailOfUser вместо params.

Если вы передаете params, URL-адрес get станет /users/getapprove?email=EmailOfUser, что не соответствует заданному правилу маршрута.

Вы можете сослаться на this .

Также параметр приема в GetApprove с именем Email имя параметра маршрутизации, которое вы устанавливаете, равно email.

Поскольку вы добавили [FromQuery], вам необходимо убедиться, что их имена точно совпадают. Или удалите атрибут [FromQuery], который позволяет использовать заглавные буквы.

Чтобы решить эту проблему, измените код следующим образом:

var getaproveUserDetails = axios.
    get("/users/getapprove/" + EmailOfUser  
    ).then(function (response) {
        var res = response.json();
        console.log("response", 'res: ' + res.message, response.message);
    })
    .catch(function (error) {
        console.log("error", error);
    });

Api (в одну сторону):

[AllowAnonymous]
[HttpGet("getapprove/{Email}")]
public async Task<IActionResult> GetApprove([FromQuery]string Email)
{
       if (Email == null)
            return BadRequest("Email is Null!.");

        var user = _userService.GetByEmail(Email);
        if (user == null)
            return NotFound();

        return Ok(user);
 }

Api (другой способ):

   [AllowAnonymous]
    [HttpGet("getapprove/{email}")]
    public async Task<IActionResult> GetApprove(string Email)
    {
           if (Email == null)
                return BadRequest("Email is Null!.");

            var user = _userService.GetByEmail(Email);
            if (user == null)
                return NotFound();

            return Ok(user);
     }
0 голосов
/ 28 апреля 2020
  1. Ошибка 401 означает несанкционированный доступ.

И [Authorize] в asp. net основной веб-API означает, что маршрут защищен, передайте свой код авторизации в заголовок ax ios, если вы используете токен JWT, выглядеть как

Authentication: "Bearer {token}"

, где переменная token - это ваш токен.

Предполагается, что ваш класс контроллера наследуется от ControllerBase, например

public class UserController : ControllerBase

...