ADFS 重定向使 MVC 控制器方法失效
ADFS redirect makes MVC controller methods incapacitated
我得到了一个 MVC Web 应用程序。
例如有如下控制器:
public class MyController
{
public MyController()
{ ... }
[HttpGet]
public ActionResult Index()
{ ... }
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult UpdateMethod(string parameter)
{ ... }
}
现在出现以下情况:
用户打开更新表单并输入值。他等了一段时间,然后提交了表格。
方法 "UpdateMethod" 应调用为 POST。但由于等待时间过长,cookie 或会话已过期,ADFS 正在注销用户,然后自动登录。在 "UpdateMethod" 中登录后再次调用(由 ADFS 重定向),但现在为获取。因此参数值丢失并发生错误,因为此方法的 [HttpGet] 不存在:
"A public action method 'UpdateMethod' was not found on controller"
如果我使用 [HttpGet] 添加类似的方法,我可以处理这种情况。但我不想为每个方法添加一个 HttpGet。
[HttpGet]
public void UpdateMethod()
{ ... }
那么应对这种情况的最佳方式是什么?
这样解决的:
- 覆盖控制器中的 HandleUnknownAction
- 如果 Request.UrlReferrer 是 adfs
,请检查覆盖
- 如果没有,请致电base.HandleUnknownAction
- 如果它被 adfs 重定向(类似于会话超时),您是否自己处理并显示自定义错误视图
我得到了一个 MVC Web 应用程序。
例如有如下控制器:
public class MyController
{
public MyController()
{ ... }
[HttpGet]
public ActionResult Index()
{ ... }
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult UpdateMethod(string parameter)
{ ... }
}
现在出现以下情况:
用户打开更新表单并输入值。他等了一段时间,然后提交了表格。
方法 "UpdateMethod" 应调用为 POST。但由于等待时间过长,cookie 或会话已过期,ADFS 正在注销用户,然后自动登录。在 "UpdateMethod" 中登录后再次调用(由 ADFS 重定向),但现在为获取。因此参数值丢失并发生错误,因为此方法的 [HttpGet] 不存在:
"A public action method 'UpdateMethod' was not found on controller"
如果我使用 [HttpGet] 添加类似的方法,我可以处理这种情况。但我不想为每个方法添加一个 HttpGet。
[HttpGet]
public void UpdateMethod()
{ ... }
那么应对这种情况的最佳方式是什么?
这样解决的:
- 覆盖控制器中的 HandleUnknownAction
- 如果 Request.UrlReferrer 是 adfs ,请检查覆盖
- 如果没有,请致电base.HandleUnknownAction
- 如果它被 adfs 重定向(类似于会话超时),您是否自己处理并显示自定义错误视图