简介
我正在开发用户可以注册的演示应用程序。用户表有"用户名" field.There" detail"行动在"家庭"控制器接受字符串"用户名"。
的参数代码
public ActionResult Detail (string username)
{
return View();
}
然后网址将
www.example.com/home/Detail?username=someparam
问题
我能设置这样的路线吗?
www.example.com/someparam
如果可能的话,请告诉我。任何形式的帮助或参考将不胜感激。
感谢您的时间。
答案 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