首页 > 解决方案 > 如何从 Flutter 发出 MVC API 请求

问题描述

我正在构建一个带有用户身份验证的 Flutter 应用程序。它适用于firebase。但是,我想重新编写 SQL Server 数据库。

我现在正在尝试获取从 MVC 应用程序返回的用户令牌。这是我的控制器中的代码:

Public Function AuthenticateUsers(ByVal APIKey As String, ByVal Password As String, ByVal ReturnSecureToken As Boolean) As JsonResult

        Dim Users As Object

        If String.IsNullOrEmpty(APIKey) Or String.IsNullOrEmpty(Password) Then
            Users = "missing parameters"
        Else
            If APIKey = "mambo" AndAlso Password = "mambo@email.com" Then
                Users = GetUsers()
            Else
                Users = "Invalid credentials"
            End If
        End If

        Return Json(Users, JsonRequestBehavior.AllowGet)

    End Function

    Private Function GetUsers() As List(Of UserModel)

        Dim usersList = New List(Of UserModel) From {
            New UserModel With {
                .idToken = 200,
                .localId = "localId",
                .expiresIn = "3600"
            }
        }

        Return usersList

    End Function

控制器的结果

这是 Flutter 应用中负责身份验证的代码部分:

  Future<void> _authenticate(
      String email, String password, String urlSegment) async {
    // final url =
    //     'https://www.googleapis.com/identitytoolkit/v3/relyingparty/$urlSegment?key=LONGKEY';

    final url = 'https://localhost:12345/Member/AutheticateUsers';
    try {
      final response = await http.post(
        url,
        body: json.encode(
          {
            'APIKey': email.trim(),
            'Password': password.trim(),
            'ReturnSecureToken': true,
          },
        ),
      );
      final responseData = json.decode(response.body);
      if (responseData['error'] != null) {
        throw HttpException(responseData['error']['message']);
      }
      _token = responseData['idToken'];
      _userId = responseData['localId'];
      _expiryDate = DateTime.now().add(
        Duration(
          seconds: int.parse(
            responseData['expiresIn'],
          ),
        ),
      );
      _autoLogout();
      notifyListeners();
      final prefs = await SharedPreferences.getInstance();
      final userData = json.encode(
        {
          'token': _token,
          'userId': _userId,
          'expiryDate': _expiryDate.toIso8601String(),
        },
      );
      prefs.setString('userData', userData);
    } catch (error) {
      print(error);
      throw error;
    }
   }

我已经注释掉了那一行,它将成功地向 firebase 进行身份验证,并重写了一个 url 以重定向到我的 MVC 应用程序。

所以现在的问题是我收到请求被拒绝的错误。这是我第一次尝试让外部应用程序调用 API。所以我想我可能会遗漏一些先决条件/格式。

有人可以指导我如何完成这项工作。

谢谢!

标签: apifluttermodel-view-controller

解决方案


您将请求定向到端口 0,

我从未见过,您确定该端口确实存在吗?

更典型的端口是 80(默认)、8080...


推荐阅读