2

目的は、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 回目に実行すると送信されません。セッションは毎回チェックする必要があるため、これは私には意味がありません。

今日の結論: ルーティング/リダイレクトの問題のようです。

4

2 に答える 2