Azure 应用服务错误 405 - 请求无法完成。(不允许的方法)

naf*_*fie 2 azure xamarin.ios azure-web-app-service

我正在使用 Azure 应用服务 .NET 后端和 Xamarin.iOS 应用程序。我能够成功注册新用户,并且可以在数据库中查看该用户的详细信息。我有一个自定义 ApiController,它处理注册,并且我能够通过成功的 POST 调用保存详细信息。

\n\n

但是,当我尝试登录该应用程序时,出现以下错误:

\n\n
{Microsoft.WindowsAzure.MobileServices.MobileServiceInvalidOperationException: The request could not be completed.  (Method Not Allowed) \n
Run Code Online (Sandbox Code Playgroud)\n\n

下面是我的代码:

\n\n

后端成功进行 POST 调用的 RegistrationController

\n\n
[MobileAppController]\n[RoutePrefix("api/register")]\n[AllowAnonymous]\npublic class RegisterController : ApiController\n{\n\n     [HttpPost]\n    [Route("newuser")]\n    public HttpResponseMessage NewUser(RegistrationRequest request)\n    {\n        // Registration code in here\n\n    }\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这就是我在客户端调用此函数的方式:

\n\n
public async Task<Result<UserProfile>> RegisterUser(RegistrationWrapper registrationrequest)\n    {\n        try\n        {\n            var registrationRequest = new JObject();\n            registrationRequest.Add("username", registrationrequest.username);\n            registrationRequest.Add("password", registrationrequest.password);\n            registrationRequest.Add("email", registrationrequest.email);\n            registrationRequest.Add("phone", registrationrequest.phone);\n            registrationRequest.Add("firstname", registrationrequest.firstname);\n            registrationRequest.Add("lastname", registrationrequest.lastname);\n\n            var result = await client.InvokeApiAsync("register/newuser", registrationRequest);\n\n\n     // Handle result here\n\n        }\n        catch (Exception ex)\n        {\n            return Result<UserProfile>.Failure(ex.Message + ex.StackTrace + ex.InnerException);\n        }\n\n    } \n
Run Code Online (Sandbox Code Playgroud)\n\n

处理登录的自定义 AuthController

\n\n

此 POST 调用失败并出现上述错误。

\n\n
 [MobileAppController]\n[RoutePrefix("api/auth")]\npublic class AuthController : ApiController\n{\n    public HttpResponseMessage Post(AuthenticationRequest credentials)\n    {\n        try\n        {\n              //Authentication code goes here\n\n          catch (Exception e)\n        {\n            Console.WriteLine("\xc3\x8brror :" + e.Message);\n            Console.WriteLine(e.StackTrace);\n            return Request.CreateResponse(HttpStatusCode.InternalServerError, new\n            {\n                Stacktrace = e.StackTrace,\n                ErrorMessage = e.Message,\n                Credentials = credentials\n            });\n        }\n\n\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

我如何从客户端调用此函数

\n\n
 async Task<Result<Account>> Login(string username, string password)\n    {\n        try\n        {\n            var credentials = new JObject();\n            credentials.Add("username", username);\n            credentials.Add("password", password);\n            var result = await client.InvokeApiAsync("auth", credentials);\n\n\n          //Handle result here\n\n        }\n        catch (Exception ex)\n        {\n            return Result<Account>.Failure(ex, ex.Message + ex.StackTrace);\n        }\n\n    }\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我不确定为什么在登录过程中失败。有什么想法吗?

\n

naf*_*fie 5

在尝试了 StackOverflow 上找到的大量解决方案后,最终对我有用的是在类似 问题上找到的第一个答案。

看来http POST 调用被重定向到https

在 Azure 门户中对应用服务启用身份验证后,需要将 url 更改为 https。

所以我改变了我的:

http//{my_site}.azurewebsites.net
Run Code Online (Sandbox Code Playgroud)

对此:

https//{my_site}.azurewebsites.net
Run Code Online (Sandbox Code Playgroud)

在客户端,现在使用这个新表来创建我的本地同步表。现在一切都按预期进行。