我已实现代码来加密我的查询字符串参数名称和值。我实现的代码只会加密包含?
的查询字符串。 (这是为了防止对不需要的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
);
如何让我的查询字符串显示为上面给出的示例?
答案 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
,则需要提供更多详细信息,因为它可能与其他内容有关。