Azure Easy Apis InvokeApi 方法正在调用 GET 而不是 POST
Azure Easy Apis InvokeApi Method is calling GET instead of POST
我目前正在使用 Azure 为 Xamarin.Android 应用程序创建自定义身份验证。我已成功创建我的 API,并且在使用高级 REST 客户端提交原始负载时它会正确返回值。
我现在正尝试使用 Azure 的 MobileServiceClient SDK 在 Xamarin.Android 上实现此功能,并且当使用 invokeApi 方法(如下面的代码所示)时,我收到一个异常,表明它正在调用 GET 而不是 POST。有谁知道我可能做错了什么?
ex.Message returns
"Cannot GET /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;
}
}
根据你的描述,我在本地测试了这个问题,我可以检索 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
。这里有一个类似的问题,你可以参考. Moreover, I would recommend you refer to adrian hall's book about Custom Authentication.
更新:
根据您的评论,我检查了自定义身份验证,并从 Adrian Hall 的书中找到了以下关于 Custom Authentication 的注释:
You must turn on Authentication / Authorization in your App Service. Set the Action to take when request is not authenticated to Allow Request (no action) and do not configure any of the supported authentication providers.
我目前正在使用 Azure 为 Xamarin.Android 应用程序创建自定义身份验证。我已成功创建我的 API,并且在使用高级 REST 客户端提交原始负载时它会正确返回值。
我现在正尝试使用 Azure 的 MobileServiceClient SDK 在 Xamarin.Android 上实现此功能,并且当使用 invokeApi 方法(如下面的代码所示)时,我收到一个异常,表明它正在调用 GET 而不是 POST。有谁知道我可能做错了什么?
ex.Message returns
"Cannot GET /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;
}
}
根据你的描述,我在本地测试了这个问题,我可以检索 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
。这里有一个类似的问题,你可以参考
更新:
根据您的评论,我检查了自定义身份验证,并从 Adrian Hall 的书中找到了以下关于 Custom Authentication 的注释:
You must turn on Authentication / Authorization in your App Service. Set the Action to take when request is not authenticated to Allow Request (no action) and do not configure any of the supported authentication providers.