目的は、Azure MVC サイトの管理と同じ URL にメンテナンス バッチを追加することです。URL は次のようになります。
https://admin.mysite.com/Batch?pass=HKE671
メソッドをトリガーするために、URL で必要な情報をオーバーライドOnActionExecuting
して取得することにしました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 エラーがスローされます。興味深いことに、私は 2 つのデバッグ メールを送信してい"DEBUG - starts maintenance"
ますOnActionExecuting
。
まず、開発マシンと Azure で動作が異なるのはなぜですか?
では、どうすればそれを機能させることができますか?ありがとう、
1 月 4 日に編集:
私は少し進歩しましたが、この問題はまだ解決されていません。
- 私の開発マシンと Azure の違いについて: このサイトにはいくつかのリダイレクトがあります: https、404、および存在しないドメイン。404エラーが原因だと思いました。コードを try/catch でカプセル化してもエラーは発生しなかったので、仮説から 404 を抑制できると推測しています。
- 上記のコードを試してみましたが、OnAuthorization
成功しませんでした。- 最初のメールは、実際には最初のテストでのみ送信されること
に気付きました。DEBUG - On result executing
テストを 2 回目に実行すると送信されません。セッションは毎回チェックする必要があるため、これは私には意味がありません。
今日の結論: ルーティング/リダイレクトの問題のようです。