目标是在 Azure MVC 站点管理的相同 url 上添加维护批次。网址应该类似于:
https://admin.mysite.com/Batch?pass=HKE671
我决定OnActionExecuting
在 url 中覆盖并捕获我需要的信息来触发该maintenance
方法。我不熟悉 MVC 项目,这听起来可能不是很传统......
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
EmailUtility.SendSupportEmail("DEBUG - On result executing", ""); //I receive this email
int y = 14;
if (Request.Url.Query.Length > y)
{
string url = Request.Url.Query.Remove(0, y); // I remove ?ReturnUrl=%2f
if (url.StartsWith("Batch"))
{
mySite.Admin.Web.Controllers.TenantController controller = new mySite.Admin.Web.Controllers.TenantController();
EmailUtility.SendSupportEmail("DEBUG - starts maintenance", ""); // I don't receive this one
controller.maintenance(HttpUtility.ParseQueryString(url).Get("pass"));
};
}
base.OnActionExecuting(filterContext);
}
这段代码和我在本地需要的一样工作,该maintenance
方法被调用并完成工作。但是在 Azure 上部署时,此修改会引发 404 错误。有趣的是,我发送了两封调试电子邮件:我没有收到第二封"DEBUG - starts maintenance"
,因此我的 404 错误来自OnActionExecuting
.
首先,我想了解为什么我的开发机器和 Azure 之间的行为不同?
那么,我怎样才能让它工作呢?谢谢,
1 月 4 日编辑:
我取得了一些进展,但这个问题仍未解决。
- 关于我的开发机器和 Azure 之间的区别:这个站点上有一些重定向:https、404 和不存在的域。我认为这是由于 404 错误。用 try/catch 封装代码并没有给我发送任何错误,所以我猜我可以从假设中抑制 404。- 我在没有更多成功的情况下
尝试了上面的代码。
- 我注意到第一封电子邮件实际上只在第一次测试时发送。我第二次运行测试时没有发送它。这对我来说没有任何意义,因为每次都应该检查会话。OnAuthorization
DEBUG - On result executing
今天的结论:它似乎更像是一个路由/重定向问题。