【解決方法】別のメソッドからのコントローラー外部へのリダイレクト


以下の条件を実装した ActionResults がいくつかあります。

C#
public async Task<ActionResult> Status(int Id)
{
      if (Id <= 0)
      {
          TempData["Errors"] = "Invalid data";

          return RedirectToAction("Error", "Dashboard");
      } ....
 }

この完全な if 条件を別のメソッドに移動し、必要な場所で呼び出したいと思います。 ご意見をお聞かせください

私が試したこと:

以下は私が試したものですが、リダイレクトは機能しません

C#
public async Task<ActionResult> Status(int Id)
        {
            UtilityHelpder helper = new UtilityHelper();
            await helper.IdCheck(this, Id);

            ...
        }


public class UtilityHelper
    {
        public async Task IdCheckHelper(Controller controller, int Id)
        {
            if (Id <= 0)
            {
            controller.TempData["Errors"] = "Invalid data";
            controller.HttpContext.Response.Redirect("/Dashboard/Error");
            }
        }
    }

解決策 1

コードの問題は、HttpContext.Response.Redirect() を使用して「/Dashboard/Error」にリダイレクトしていることです。 このメソッドは別のクラスから呼び出しているため、現在のリクエストの URL にアクセスできません。これがリダイレクトが機能しない理由です。

HttpContext.Response.Redirect() を使用する代わりに、IdCheckHelper メソッドから RedirectToActionResult を返すことができます。

例:

C#
if (Id <= 0)
      {
          controller.TempData["Errors"] = "Invalid data";
          return new RedirectToActionResult("Error", "Dashboard", null);
      }
      return null;

コメント

タイトルとURLをコピーしました