如何从 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 需要能够识别您想要点击哪个控制器以及执行哪个操作,并且最好保持在它的约定范围内。
此外,每个应用程序通常会有多个控制器,这样可以很好地实现关注点分离。现在您已将自己硬编码为只有一个控制器和一个操作。
不过,您所建议的可以通过网络表单的方式更轻松地完成,所以也许您想研究一下。
简介
我正在开发演示应用程序,用户可以在其中 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 需要能够识别您想要点击哪个控制器以及执行哪个操作,并且最好保持在它的约定范围内。
此外,每个应用程序通常会有多个控制器,这样可以很好地实现关注点分离。现在您已将自己硬编码为只有一个控制器和一个操作。
不过,您所建议的可以通过网络表单的方式更轻松地完成,所以也许您想研究一下。