发送到MVC控制器的查询字符串被编码

时间:2011-11-25 21:05:10

标签: asp.net-mvc iis-7

我是论坛的新手,也是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”); %GT;在主视图上,正确呈现,但单击项目时,结果是404错误。 我在web.config上更改的一件事是以下设置: requestValidationMode =“2.0”requestPathInvalidCharacters =“” 因为我收到错误:从客户端(?)检测到一个潜在危险的Request.Path值,在addindg这些设置之后,Request.Path错误消失,但现在我得到了404.

任何帮助。 感谢。

1 个答案:

答案 0 :(得分:0)

你是Url.Encoding查询字符串中的键/值吗?

HttpUtility.UrlEncode

你可以粘贴失败的网址吗?如果您不对其进行编码(例如'/'),则查询字符串中可能包含一些无效字符,这可能会导致问题。