строка запроса, отправляемая контроллеру MVC, кодируется - PullRequest
0 голосов
/ 26 ноября 2011

Я новичок на форуме, а также довольно новичок в MVC.У меня есть приложение MVC, которое работает нормально во время тестирования в моей локальной среде разработки, но при развертывании на IIS7 у меня возникают некоторые проблемы, одна из которых заключается в том, что я получаю ошибку 404 при вызове действия из контроллера, передающего параметры в строку запроса,"?"и "=" кодируются IIS, и я полагаю, что это причина сбоя вызова.Действие моего контроллера:

public ActionResult CreateMenu()
        {
            MenuModel.MenuItem menuItem;
            MenuModel.MenuItem childItem;

            if (AuthenticationService.IsUserAuthenticated())
            {
                string u_id = AuthenticationService.GetAuthenticatedUserName();
                Role u_role = Repository.GetUserRole(u_id);

                mainMenu.MenuItems.RemoveAt(0);
                if ((u_role.Role_Desc == "Administrator") || (u_role.Role_Desc == "Manager"))
                {
                    int lastMenuNumber = mainMenu.MenuItems.Count;
                    menuItem = new MenuModel.MenuItem(++lastMenuNumber, "Account Settings", "", "");
                    childItem = new MenuModel.MenuItem(++lastMenuNumber, "Log Report", "LogReporting", "ShowLog");
                    menuItem.ChildItems.Add(childItem);

                    childItem = new MenuModel.MenuItem(++lastMenuNumber, "User Permissions", "PermissionsSetting", "ListPermissions");
                    menuItem.ChildItems.Add(childItem);

                    mainMenu.MenuItems.Insert(0, menuItem);
                }
                // list of accessible BGs for selected client

                var selectedClient = Session["client_Id"] != null ?
                                        Repository.GetClientById((short)Session["client_Id"]) :
                                        Repository.GetUserClients(u_id).First();

                int i = 0;
                var bgs = Repository.GetUserClientAccesibleBusinessGroups(u_id, selectedClient.Client_ID);
                if (bgs.Count() > 0)
                {
                    foreach (var bg in bgs)
                    {                                                                                              

                        menuItem = new MenuModel.MenuItem(mainMenu.MenuItems.Count + 1, bg.BG_Desc, "FtpAccess", String.Format("Group/{0}?cbg={1}", selectedClient.Client_ID, bg.Client_BG_ID));
                        mainMenu.MenuItems.Insert(i++, menuItem);
                    }
                }
            }

            ViewData.Model = mainMenu;
            return View();
        }

Используется в частичном представлении <% Html.RenderAction ("CreateMenu", "Menu");%> в главном представлении, которое отображается правильно, но при щелчке по элементу возникает ошибка 404.Одна вещь, которую я изменил в web.config, это настройки для: requestValidationMode = "2.0" requestPathInvalidCharacters = "", потому что я получаю сообщение об ошибке: потенциально опасное значение Request.Path было обнаружено клиентом (?) После добавления этихнастройки ошибка Request.Path исчезают, но теперь я получаю 404.

Любая помощь.Спасибо.

1 Ответ

0 голосов
/ 26 ноября 2011

Являетесь ли вы Url.Encoding ключей / значений в строке запроса?

HttpUtility.UrlEncode

Вы можете вставить URL, который не удается?Возможно, в строке запроса содержатся недопустимые символы, если вы не кодируете их (например, '/'), что может вызывать проблему.

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