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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Azure应用服务错误405 - 无法完成请求。 (不允许的方法)相关的知识,希望对你有一定的参考价值。

我正在使用带有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);
        }

    }

}

我不确定为什么它在登录期间失败了。有什么想法吗?

答案

在尝试了StackOverflow上的大量解决方案后,最终为我工作的解决方案是在类似的 question上找到的第一个答案。

似乎http POST调用被重定向到https。

在Azure门户中的App Service上启用身份验证后,您需要将URL更改为https。

所以我改变了我的意思:

http//{my_site}.azurewebsites.net

对此:

https//{my_site}.azurewebsites.net

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

以上是关于Azure应用服务错误405 - 无法完成请求。 (不允许的方法)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Azure 中启用 PUT 请求?

cpanel 上的 Laravel POST 请求有时会返回 405 错误

来自 .net WCF 服务的 405 响应错误

向 Cassini Web 服务器发送请求 URI 为“/”的 POST 请求,导致 405 错误。为啥?

为啥我的 post 请求返回 405 错误? [复制]

405 方法不允许使用 $http 服务 AngularJS