Не все пути возвращают значение в Public ActionResult, я использовал Exception - PullRequest
0 голосов
/ 04 октября 2019

В основном, когда я делаю это

public ActionResult ValidateLogin()
{
    return View();
}

Теперь это работает нормально. Когда я использую в этом случае, скажем, блок try catch, и я делаю что-то вроде return RedirectToAction("Dashboard"); в блоках try catch, я также ожидаючто он должен проверить обозначение, прежде чем он перенаправит пользователя на главную страницу, он запускается и ошибка, как не все пути возвращают значение.

Мой исходный код выглядит так

public ActionResult ValidateLogin(UserAuthClass auth)
{
    string constring = @"Data Source=DESKTOP-9CM4N5S\SQLEXPRESS;Initial Catalog=MVCLogintestDB;Integrated Security=True";
    using (SqlConnection con = new SqlConnection(constring))
    {
        con.Open();

        string query = "select * from [MVCLogintestDB].[dbo].[users_table] where username = @username and password= @password and designation = @designation";
        using (SqlCommand cmd = new SqlCommand(query, con))
        {
            cmd.Parameters.AddWithValue("@username",auth.username);
            cmd.Parameters.AddWithValue("@password", auth.password);
            cmd.Parameters.AddWithValue("designation", auth.designation);

            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();

            try
            {
                da.Fill(dt);
                if (dt.Rows.Count > 0)
                {
                    if (auth.designation == "Admin")
                    {
                        return RedirectToAction("AdminDashboard");
                    }
                    else if (auth.designation == "Security")
                    {
                        return RedirectToAction("SecurityDashboard");
                    }
                    else if (auth.designation == "Visitor")
                    {
                        return RedirectToAction("VisitorDashboard");
                    }
                }
                else
                {
                    return RedirectToAction("WrongPasswordArea");
                }
            }
            catch(Exception ex)
            {
                throw ex;
            }
        }
    }
}

Я пытаюсь понять, в чем дело, что мне здесь не хватает?

Ответы [ 3 ]

1 голос
/ 04 октября 2019

Сделайте рефакторинг на вашей if-else-if логике. Я реализовал более простую версию, и в результате ваша ошибка исчезла.

Вам придется адаптироваться, как я это сделал, чтобы проверить это в быстрой среде. Но просто зайдите в смелость, if-else-if, и сделайте это более логичным. Снова нет ошибки о пропущенных возвратах в коде ниже.

public string ValidateLogin(string auth)
{
    using (new NoDispose())
    {
        using (new NoDispose())
        {
            try
            {
                int dtRowsCount = 10;
                string authDesignation = "";
                if (dtRowsCount <= 0)
                    return "WrongPasswordArea";
                switch (authDesignation)
                {
                    case "Admin":
                        return "AdminDashboard";
                    case "Security":
                        return "SecurityDashboard";
                    case "SecurityDashboard":
                        return "SecurityDashboard";
                    case "Visitor":
                    default:
                        return "VisitorDashboard";
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}

Отказ от ответственности. Я не утверждаю, что логика, реализованная выше, делает в точности то же, что и предыдущая, или что она соответствует вашим требованиям.

Используя цепочки

И, кстати, вы можете связать usingзаявления в следующем порядке.

using (var a = new NoDispose())
using (var b = new NoDispose())
{
    // both a and b are available in here
}
0 голосов
/ 04 октября 2019

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

0 голосов
/ 04 октября 2019

Вы должны иметь возврат по умолчанию за пределами вашего блока использования. Примерно так:

return RedirectToAction("Login");

Когда все сценарии не удаются, верните пользователя на страницу входа или как там называется ваша страница входа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...