强制显示在查询字符串中的问号,其中只传递ID参数

时间:2018-01-10 08:53:01

标签: c# asp.net-mvc routes query-string

我已实现代码来加密我的查询字符串参数名称和值。我实现的代码只会加密包含?的查询字符串。 (这是为了防止对不需要的URL进行加密,例如.css文件。)

解决这个问题的方法是在只传递ID参数时始终在查询字符串中显示?

例如我想:http://domain/controller/Action/17
显示为:http://domain/controller/Action/?id=17

我了解我可能需要修改路线,我已尝试将?符号添加到引发错误的路线: The route URL cannot start with a '/' or '~' character and it cannot contain a '?' character.

我的路线定义为:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("favicon.ico");

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Login", id = UrlParameter.Optional } // Parameter defaults
);

如何让我的查询字符串显示为上面给出的示例?

1 个答案:

答案 0 :(得分:0)

不要在routes中定义您的参数。

ASP.NET automaticaly会添加问号。

然后,您可以致电http://domain/controller/Action?id=17,然后转到

public ActionResult Action(int id) { }

更新:如果要完全删除domain/controller/action/id格式,则需要将路由定义为:

routes.MapRoute(
   name: "Parameterless", //or any name
   url: "YourController",
   defaults: new { controller = "YourController", action = "YourAction" }
);

现在您可以使用domain/controller/action?id={id}domain/controller/action/id将使用404。

如果您获得Server Application Error,则需要提供更多详细信息,因为它可能与其他内容有关。