Перенаправление внутри класса int, если произошла ошибка без изменения типа класса - PullRequest
0 голосов
/ 19 апреля 2020

Я новичок в c# и у меня возникла проблема с попыткой настроить перехват определенного класса c.

У меня уже есть много trycatch и перенаправлений в моем коде, но 1 часть Кажется, я не могу получить это ниже, я знаю, что проблема в том, что класс является int и должен быть ActionResult для использования перенаправления, но затем я получаю ошибку в возвращаемом int. Мне нужно, чтобы класс работал для обоих.

Текущий класс в моем BaseController, который работает, и я вызываю GetUID () на большинстве других контроллеров;

    public int GetUID()
    {
        return int.Parse(System.Web.HttpContext.Current.Session["UID"].ToString());
    }

У меня есть проблема, если чей-то сеанс время от времени они получат ошибку, но я хочу, чтобы они были перенаправлены на страницу входа в систему.

Поэтому я попытался сделать следующее;

    public int GetUID()
    {
        try
        {
            return int.Parse(System.Web.HttpContext.Current.Session["UID"].ToString());
        }
        catch(Exception)
        {
            return RedirectToAction("Login", "Account");
        }
    }

, потому что класс является классом int Я получаю сообщение об ошибке при перенаправлении: «Не удается неявно преобразовать тип« System.Web. Mvc .RedirectToRouteResult »в« int »».

Я также попытался выполнить следующее;

    public ActionResult GetUID()
    {
        try
        {
            return int.Parse(System.Web.HttpContext.Current.Session["UID"].ToString());
        }
        catch(Exception)
        {
            return RedirectToAction("Login", "Account");
        }
    }

Но тогда я получаю противоположную ошибку: "Не удается неявно преобразовать тип 'int' в 'System.Web. Mvc .RedirectToRouteResult'".

Есть ли способ сохранить класс вернуть int, НО, если есть ошибка, чтобы перенаправить на страницу входа? Я посмотрел на SO и Google, и я вижу множество вопросов о переходе с View на Action, et c. но ничего похожего на это. Цени любую помощь.

1 Ответ

1 голос
/ 19 апреля 2020

Вы должны определить и вернуть код ошибки int, описывающий действие перенаправления, и когда вы его видите, вы должны вызвать метод RedirectToAction.

РЕДАКТИРОВАТЬ: Вы можете не вернуть разные типы. Затем или вы возвращаете объект:

public object GetUID(){...}

и в вашем BaseController вы можете сделать:

object o = GetUID();
if (o is int UID)
    //do your stuff 
else if (o is ActionResult action)
    //execute the action

альтернативой является определение кодов ошибок, например, отрицательные числа являются ошибками. Тогда у вас будет:

public const int ReturnHomeError = -1;
public int GetUID()
{
    try
    {
        return int.Parse(System.Web.HttpContext.Current.Session["UID"].ToString());
    }
    catch(Exception)
    {
        return ReturnHomeError;
    }
}

, а в вашем BaseController вы можете сделать:

int uid = GetUID();
switch(uid)
{
    case ReturnHomeError:
        //Call RedirectToAction("Login", "Account")
        break;
    default:
        //Do your stuff
        break;
}
...