Azure 应用服务 - 自定义身份验证 - 不允许 HTTP 动词

2024-05-27

我按照本教程在我的 Xamarin.Forms 应用程序中启用身份验证:https://adrianhall.github.io/develop-mobile-apps-with-csharp-and-azure/chapter2/custom/ https://adrianhall.github.io/develop-mobile-apps-with-csharp-and-azure/chapter2/custom/

使用 Postman 进行的测试(如教程中所述)成功。令牌返回。

当我从我的 C# 代码中调用它时...

LoginAsync("custom", Newtonsoft.Json.Linq.JObject.FromObject(auth));

我收到如下错误:

Method not allowed. HTTP Verb not allowed

我发现Azure SDK在调用LoginAsync时发送POST和GET请求。所以我改变了这个...

[HttpPost, Route(".auth/login/custom")]
        public IHttpActionResult Post([FromBody]CPM.Arda.Mobile.Freelancer.Backend.DataObjects.Recruitment.Custom.PromoterAuthRequest promoterAuth)

对此...

[HttpPost, HttpGet, Route(".auth/login/custom")]
        public IHttpActionResult Post([FromBody]CPM.Arda.Mobile.Freelancer.Backend.DataObjects.Recruitment.Custom.PromoterAuthRequest promoterAuth)

HTTP 动词错误消失,但出现以下错误:

 Operation=ReflectedHttpActionDescriptor.ExecuteAsync, Exception=System.NullReferenceException: Object reference not set to an instance of an object.
   at CPM.Arda.Mobile.Freelancer.Backend.Controllers.Custom.CustomAuthController.Post(PromoterAuthRequest promoterAuth)
   at lambda_method(Closure , Object , Object[] )
   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters)
   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)
   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Web.Http.Tracing.ITraceWriterExtensions.<TraceBeginEndAsyncCore>d__18`1.MoveNext()
2017-07-11T10:39:50  PID[9680] Error       Operation=ApiControllerActionInvoker.InvokeActionAsync, Exception=System.NullReferenceException: Object reference not set to an instance of an object.
   at CPM.Arda.Mobile.Freelancer.Backend.Controllers.Custom.CustomAuthController.Post(PromoterAuthRequest promoterAuth)
   at lambda_method(Closure , Object , Object[] )
   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters)
   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)
   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)

我真的很困惑。该主题似乎没有现成可用的教程。


我发现Azure SDK调用 LoginAsync 时发送 POST 和 GET 请求.

AFAIK,移动应用程序后端将强制使用 https,如果您使用http,那么您将得到 302 状态代码,如下所示:

As this issue https://github.com/containous/traefik/issues/1819提到过,从 http -> https 重定向会导致 http 动词变为 GET。

启动时将移动应用程序 Uri 更改为 HttpsMobileServiceClient,您的代码将按预期工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Azure 应用服务 - 自定义身份验证 - 不允许 HTTP 动词 的相关文章

随机推荐