ASP.NET Core 5调用ACS/Logout接口出现405 Method Not Allowed错误咨询
错误原因
HTTP 405状态码的含义是请求方法不被目标接口允许,该问题的直接诱因如下:
- 你代码中
ACSController下的Logout接口仅添加了[HttpPost]特性,仅允许POST类型的请求访问 - 从你提供的跳转链接可以看到,
SAMLResponse参数是携带在URL查询字符串中的,说明IdP完成登出后是通过GET请求跳转回调到你的/acs/logout接口,和接口允许的请求方法不匹配,因此返回405错误。
解决方法
你可以根据实际场景选择以下任意一种方案:
方案1:接口同时兼容GET、POST请求(兼容性最高,推荐)
修改Logout方法的请求方法限制,同时适配两种请求方式的参数取值逻辑:
[AcceptVerbs("GET", "POST")] public IActionResult Logout() { // 优先从表单取参数,取不到再从查询字符串取,兼容两种请求方式 string base64Response = Request.Form.ContainsKey("SAMLResponse") ? Request.Form["SAMLResponse"].ToString() : Request.Query["SAMLResponse"].ToString(); // 原有后续逻辑保持不变 return View(); }
方案2:调整IdP的登出回调配置
如果你使用的IdP支持自定义登出响应的提交方式,可以将登出回调的提交方式修改为POST表单提交,也可以解决该问题,但是兼容性不如方案1。
内容的提问来源于stack exchange,提问作者Antonio Argentieri
相关产品推荐
相关产品推荐

