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

时间:2016-07-09 07:02:14

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 asp.net-mvc-routing

简介

我正在开发用户可以注册的演示应用程序。用户表有"用户名" field.There" detail"行动在"家庭"控制器接受字符串"用户名"。

的参数

代码

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

然后网址将

  

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

问题

我能设置这样的路线吗?

  

www.example.com/someparam

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

感谢您的时间。

2 个答案:

答案 0 :(得分:3)

如果您更改路线的定义方式,那么这是可行的。我们假设你使用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需要能够识别您想要击中哪个控制器以及哪个动作,并且最好保持它所具有的约定。

另外,每个应用程序通常都有多个控制器,这样可以实现良好的关注点分离。现在你已经硬编码了自己只有一个控制器和动作。

你建议的内容可以通过webforms方式轻松完成,但也许你想要研究一下。

答案 1 :(得分:1)

如果你定义这样的代码

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

然后网址将

  

www.example.com/api/Detail/someparam

所以我邀请您定义如下,请自行承担风险!

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

网址将是:

  

www.example.com/someparam