asp.net-mvc - 如何从 url : asp.net mvc 隐藏操作和 Controller

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

简介

我正在开发用户可以注册的演示应用程序。用户表有“用户名”字段。“home” Controller 中有“详细”操作,接受字符串“用户名”参数。

代码

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

那么 url 将是

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

问题

我可以这样设置路线吗?

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 }

);

我们基本上将 Controller 和操作硬编码为某个值,因此现在您只需拥有 url/paramname,它就会达到硬编码组合。

话虽如此,我不会做这样的事情,因为它违背了 MVC 的工作方式

MVC 路由是 url/controller/action。您可以跳过通用内容(例如索引)的操作,并且您的 URL 变为 url/controller。 MVC 需要能够识别您想要点击哪个 Controller 以及哪个操作,并且最好遵守其约定。

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

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

关于asp.net-mvc - 如何从 url : asp.net mvc 隐藏操作和 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38279283/

相关文章:

c# - Entity Framework 6 日期时间问题

c# - MVC3 全局化 : need global filter before model binding

c# - 通过局部 View MVC3 传递模型

c# - 如何在自定义验证属性中访问 View 模型的属性值以更改消息?

c# - MVC 4 中正确的 JSON 序列化

c# - ASP.net 验证 : why do my DateTime fields also flag up as required?

c# - 处理 Action 过滤器和 Orchard 框架的异常

javascript - jquery中检查复选框是否被选中

wcf - 何时使用MVC4 Web-API和传统的HTTP Web服务?

c# - DelegatingHandler 中没有响应头