【问题标题】:How to pass parameter to HTTP Get method from .Net Core + React如何从.Net Core + React将参数传递给HTTP Get方法
【发布时间】:2020-04-29 14:23:10
【问题描述】:

我们使用 React 和 redux 模板创建了一个 .Net 核心 Web API 项目。现在我们想调用一个包含参数的 Http Get 方法。我是反应和 API 概念的新手,那么该怎么做呢?我尝试过如下操作,它无法正常工作或始终显示 401 或 415 错误。我哪里做错了?

与 Axios 反应,

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 {...    ...

【问题讨论】:

  • 什么时候收到 401,什么时候收到 415 HTTP 状态码?您以错误的方式向请求提供参数。您应该以这种方式发出 get 请求:axios.get("/users/getapprove/${EmailOfUser}").then().. 并删除 [FromQuery] 属性。第二种方法是保留您的代码并从 [HttpGet] 属性中删除 /{email} 部分。

标签: reactjs api asp.net-core parameters axios


【解决方案1】:

首先,您已将请求路由更改为[HttpGet("getapprove/{email}")],因此,您需要通过此路由调用此api操作:"/users/getapprove/"+ EmailOfUser而不是params。

如果传递参数,get url 将变为 /users/getapprove?email=EmailOfUser 与 你设置的路由规则。

您可以参考this

另外,GetApprove中的receive参数名为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);
     }

【讨论】:

  • 非常感谢你 :)
【解决方案2】:
  1. 错误 401 表示未授权。

asp.net core web API 中的 [Authorize] 意味着路由是安全的,在 axios 标头中传递您的身份验证代码,如果您使用的是 JWT 令牌,它将看起来像

Authentication: "Bearer {token}"

变量token是你的token。

  1. 假设您的控制器类继承自 ControllerBase,例如

public class UserController : ControllerBase

【讨论】:

    猜你喜欢
    • 2019-03-12
    • 1970-01-01
    • 2016-07-16
    • 2015-02-02
    • 2016-05-29
    • 2019-05-21
    • 1970-01-01
    • 2018-01-27
    相关资源
    最近更新 更多