【发布时间】:2016-05-09 10:42:20
【问题描述】:
目标是在 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 实际上只在第一次测试时发送。我第二次运行测试时没有发送它。这对我来说没有任何意义,因为每次都应该检查会话。
今天的结论:这似乎更像是一个路由/重定向问题。
【问题讨论】:
标签: c# asp.net-mvc azure routing onactionexecuting