【问题标题】:Azure Easy Apis InvokeApi Method is calling GET instead of POSTAzure Easy APIs InvokeApi 方法正在调用 GET 而不是 POST
【发布时间】:2017-09-08 04:49:24
【问题描述】:

我目前正在使用 Azure 为 Xamarin.Android 应用创建自定义身份验证。我已经成功创建了我的 API,并且在使用 Advanced REST Client 提交原始有效负载时它可以正确返回值。

我现在正在尝试使用 Azure 的 MobileServiceClient SDK 在 Xamarin.Android 上实现此功能,并且当使用下面在我的代码中演示的 invokeApi 方法时,我收到一个异常,表明它正在调用 GET 而不是 POST。有谁知道我可能做错了什么?

ex.Message 返回

“无法获取 /api/register?username=azureAccountTest&password=testingpassword”

    public async Task RegisterAsync()
    {
        Dictionary<string, string> user = new Dictionary<string, string>
        {
            { "username", username },
            { "password", password }
        };
        try
        {
            CancellationToken ct;
            var result = await client.InvokeApiAsync("register", HttpMethod.Post, user, ct);
        }
        catch(Exception ex)
        {
            var message = ex.Message;
        }
    }

【问题讨论】:

    标签: android azure xamarin.android azure-api-apps


    【解决方案1】:

    根据您的描述,我在本地测试了这个问题,我可以检索到authenticationToken,如下所示:

    您对InvokeApiAsync使用了以下方法:

    public Task<JToken> InvokeApiAsync(string apiName, HttpMethod method, IDictionary<string, string> parameters, CancellationToken cancellationToken = default(CancellationToken));
    

    注意:总结了附加数据将通过查询字符串发送到。

    根据我的理解,您可以参考以下通过HTTP内容发送附加数据的方法,如下所示:

    JObject user = new JObject();
    user.Add("username", "bruce");
    user.Add("password", "123456");
    var result = await App.MobileService.InvokeApiAsync("/.auth/login/custom", HttpMethod.Post, user, ct);
    

    此外,在部署到 Azure 端时,您需要使用 https 端点指定 mobileAppUri。这是一个类似的问题,您可以参考here。此外,我建议你参考阿德里安霍尔关于Custom Authentication的书。

    更新:

    根据您的评论,我检查了自定义身份验证,并从 adrian hall 的书中找到了以下关于 Custom Authentication 的注释:

    您必须在您的应用服务中开启身份验证/授权。将请求未通过身份验证时采取的操作设置为允许请求(无操作)并不配置任何受支持的身份验证提供程序。

    【讨论】:

    • 我刚刚通过测试发现了一些新的东西,当我的 Azure 门户上禁用身份验证/授权时,我的代码看起来确实有效。我能够检索身份验证令牌和用户对象。这让我相信问题在于我的 api 是如何路由的。我注意到您将自定义登录路由到 /.auth/custom/login 但我的路由到 /api/register 所以我将尝试更改它并测试以查看是否可以解决我遇到的问题。
    • 你解决了这个问题吗,需要进一步的帮助吗?
    • 我仍在尝试解决它,从那以后我从 Node.js 切换到 C# 作为后端,但似乎必须为 POST 请求禁用授权/身份验证。所以我现在可能就这样吧。
    • 我查看了阿德里安·霍尔的书,并用相关说明更新了我的答案。你是对的,禁用身份验证/授权或按照阿德里安霍尔的说明使用自定义身份验证。
    • 感谢您的帮助! Noobie 错误,没有意识到我没有使用 HTTPS 设置我的 MobileServiceClient。将其从 http://appurl.azurewebsites.net 更改为 https://appurl.azurewebsites.net 解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多