如何从 url 中隐藏操作和控制器:asp.net mvc

How to hide action and controller from url : asp.net mvc

简介

我正在开发演示应用程序,用户可以在其中 register.Users table 让 "username" field.There 是 "detail" 在 "home" 控制器中接受的操作字符串参数 "username".

代码

public ActionResult Detail (string username)
{
 return View();
}

那么 url 将是

www.example.com/home/Detail?username=someparam

问题

我可以这样设置路线吗?

www.example.com/someparam

如果可能的话,请告诉我。任何形式的帮助或参考将不胜感激。

感谢您的宝贵时间。

如果你这样定义代码

[HttpGet, Route("api/detail/{username:string}")]
public ActionResult Detail (string username)
{
 return View();
}

那么url将是

www.example.com/api/Detail/someparam

所以请您定义如下,请您自担风险!

[HttpGet, Route("/{username:string}")]

Url 将是:

www.example.com/someparam

如果您更改路由的定义方式,这是可行的。假设您使用 dot net 4.5.2

查看 App_Start 下的 RouteConfig。

一个典型的路由定义是这样定义的:

routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

没有什么能阻止将路线更改为如下所示:

routes.MapRoute(
name: "Default",
url: "{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

);

我们基本上是将控制器和动作硬编码为某个值,所以现在您可以只使用 url/paramname,它将达到硬编码组合。

据说我不会做这样的事情,因为它违背了 MVC 的工作方式

MVC 路由是 url/controller/action。例如,您可以跳过索引等通用内容的操作,您的 URL 变为 url/controller。 MVC 需要能够识别您想要点击哪个控制器以及执行哪个操作,并且最好保持在它的约定范围内。

此外,每个应用程序通常会有多个控制器,这样可以很好地实现关注点分离。现在您已将自己硬编码为只有一个控制器和一个操作。

不过,您所建议的可以通过网络表单的方式更轻松地完成,所以也许您想研究一下。