在MVC5 中如何实现动态controller?

编程有钱人了 2015-12-18 09:22:07
一般情况下 建一个Controller 比如HomeController
那么会生成一下代码

public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{

return View();
}
}

访问地址就是
http://localhost:30713/Home/Index

动态aciton 在MVC5好实现 比如

[Route("Home/{action}")]
public ActionResult Index(string aciton)
{
return View();
}

那么访问地址
http://localhost:30713/Home/aaaa
http://localhost:30713/Home/bbb
http://localhost:30713/Home/ccc
http://localhost:30713/Home/dddd
..
...
..
都能动态获取这个aciton
那么怎么动态控制Controller 呢?
举个例子我不用手动创建一个Controller 就能动态获取Controller 名
http://localhost:30713/Home111
http://localhost:30713/Home222/Feacture
http://localhost:30713/Home333/Feacture
http://localhost:30713/aaaa/Feacture
http://localhost:30713/bbbb/Feacture
http://localhost:30713/ccccc/Feacture
...
..
..
依次类推
如果按照老办法 我必须手动创建 每个控制器Home111,Home222,Home333 等等

看别人家网站有实现的案例 就也想这么实现。。。
因为这个项目也要按照这么做的。
为了怕被误会做广告 域名我修改下,
人家网站实现的效果地址是:
http://域名/Anhui-Medical-University-287
http://域名/Beijing-Forestry-University-178
http://域名/Central-South-University-96
...
...
域名后面的controller 我觉得他们网站不可能一个个手动创建的 因为据我知道 有上百个呢甚至更多!
往大神们帮助一下
...全文
437 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
AmirLea 2017-03-27
  • 打赏
  • 举报
回复
楼主,您说的 动态aciton 在MVC5好实现, 我怎么实现不了呢?



是我哪里写错了吗?
编程有钱人了 2015-12-18
  • 打赏
  • 举报
回复
引用 6 楼 starfd 的回复:
不通过RouteAttribute,而是通过全局注册route,这样可以实现
routes.MapRoute(
    name: "Customer",
    url: "{city}-{positon}-{school}-{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
如果网站中有些地方 不想用这个路由了怎么办?怎么覆盖这个 我试了在下面添加多个不好使

  routes.MapRoute(
              name: "Customer",
              url: "{school}/{action}/{id}",
              defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
          );
            //上面的有效了 下面的就无效了
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
编程有钱人了 2015-12-18
  • 打赏
  • 举报
回复
谢谢 楼上2位 我抓紧试试
  • 打赏
  • 举报
回复
你可以在 Global.asax 中自己随便解析路径,然后使用 context.Request、contex.Response 去处理输入输出。例如 C# code ? 1 2 3 4 5 6 7 8 void Application_BeginRequest(object sender, EventArgs e) { var context = HttpContext.Current; var path = context.Request.Path; var ps = path.Split(new char[] { '/','\\' }); var qs = context.Request.QueryString; ......... 可以向 context.Response 随便输出结果 } 可以试试访问 http://域名:端口/abc/1234/xx?code=zh&id=887373,看看得到什么结果。
  • 打赏
  • 举报
回复
不通过RouteAttribute,而是通过全局注册route,这样可以实现
routes.MapRoute(
    name: "Customer",
    url: "{city}-{positon}-{school}-{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
编程有钱人了 2015-12-18
  • 打赏
  • 举报
回复
引用 4 楼 starfd 的回复:
你那个所谓的controller,我更感觉是route部分没有声明controller,而是指定了默认controller,然后后面都是参数声明
我感觉也是 但是就是不知道怎么实现的
  • 打赏
  • 举报
回复
你那个所谓的controller,我更感觉是route部分没有声明controller,而是指定了默认controller,然后后面都是参数声明
  • 打赏
  • 举报
回复
action是关键字,我曾经想试验如何在mvc或者webapi中在请求参数中接收叫action的参数,用过各种方法,包括声明修正,比如前面加@表示这不是关键字,如string @action,但还是不行
编程有钱人了 2015-12-18
  • 打赏
  • 举报
回复
引用 2 楼 starfd 的回复:
action是关键字,我曾经想试验如何在mvc或者webapi中在请求参数中接收叫action的参数,用过各种方法,包括声明修正,比如前面加@表示这不是关键字,如string @action,但还是不行
如果是动态设置aciton 上面我的方法中说道了,MVC5自定义就可以
编程有钱人了 2015-12-18
  • 打赏
  • 举报
回复
来人帮我解决问题呀
编程有钱人了 2015-12-18
  • 打赏
  • 举报
回复
引用 10 楼 starfd 的回复:
我记得RouteAttribute优先级高于全局配置的Route
我试了RouteAttribute 不行
  • 打赏
  • 举报
回复
我记得RouteAttribute优先级高于全局配置的Route

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧