我正在使用带有Xamarin.iOS应用的Azure App Service .NET后端。我能够成功注册一个新用户,我可以在数据库中看到用户的详细信息。我有一个自定义ApiController,它处理注册,我可以通过成功的POST调用保存详细信息。
但是,当我尝试登录应用程序时,出现以下错误:
{Microsoft.WindowsAzure.MobileServices.MobileServiceInvalidOperationException: The request could not be completed. (Method Not Allowed)
以下是我的代码:
后端的RegistrationController成功进行了POST调用
[MobileAppController]
[RoutePrefix("api/register")]
[AllowAnonymous]
public class RegisterController : ApiController
{
[HttpPost]
[Route("newuser")]
public HttpResponseMessage NewUser(RegistrationRequest request)
{
// Registration code in here
}
}
这就是我在客户端调用此函数的方法:
public async Task<Result<UserProfile>> RegisterUser(RegistrationWrapper registrationrequest)
{
try
{
var registrationRequest = new JObject();
registrationRequest.Add("username", registrationrequest.username);
registrationRequest.Add("password", registrationrequest.password);
registrationRequest.Add("email", registrationrequest.email);
registrationRequest.Add("phone", registrationrequest.phone);
registrationRequest.Add("firstname", registrationrequest.firstname);
registrationRequest.Add("lastname", registrationrequest.lastname);
var result = await client.InvokeApiAsync("register/newuser", registrationRequest);
// Handle result here
}
catch (Exception ex)
{
return Result<UserProfile>.Failure(ex.Message + ex.StackTrace + ex.InnerException);
}
}
处理登录的自定义AuthController
此POST调用因上述错误而失败。
[MobileAppController]
[RoutePrefix("api/auth")]
public class AuthController : ApiController
{
public HttpResponseMessage Post(AuthenticationRequest credentials)
{
try
{
//Authentication code goes here
catch (Exception e)
{
Console.WriteLine("Ërror :" + e.Message);
Console.WriteLine(e.StackTrace);
return Request.CreateResponse(HttpStatusCode.InternalServerError, new
{
Stacktrace = e.StackTrace,
ErrorMessage = e.Message,
Credentials = credentials
});
}
}
我如何从客户端调用此功能
async Task<Result<Account>> Login(string username, string password)
{
try
{
var credentials = new JObject();
credentials.Add("username", username);
credentials.Add("password", password);
var result = await client.InvokeApiAsync("auth", credentials);
//Handle result here
}
catch (Exception ex)
{
return Result<Account>.Failure(ex, ex.Message + ex.StackTrace);
}
}
}
我不确定为什么它在登录期间失败。有什么想法吗?
答案 0 :(得分:0)
在StackOverflow上尝试了大量解决方案后,最终为我工作的解决方案是在类似的 question上找到的第一个答案。
似乎 http POST呼叫被重定向到 https 。
在Azure门户中的App Service上启用身份验证后,您需要将网址更改为https。
所以我改变了我的意思:
http//{my_site}.azurewebsites.net
对此:
https//{my_site}.azurewebsites.net
在客户端,现在使用这个新的来创建我的本地同步表。 一切都按预期工作。