Asp.net mvc 在ASP MVC 2中向控制器发送参数

Asp.net mvc 在ASP MVC 2中向控制器发送参数,asp.net-mvc,asp.net-mvc-2,parameters,Asp.net Mvc,Asp.net Mvc 2,Parameters,我正在编写一个用于管理多个子网站的区域,几乎所有功能在每个网站上都是相同的(添加/编辑/删除页面等),我的实例化存储库采用SiteIdentity,因此所有数据访问方法都与此无关。我现在的问题是试图让我的行动方法也不可知 我想使用的URL模式大致如下: “外部站点/{identity}/{controller}/{action}/{id}” 一种简单的方法是让每个操作都使用identity参数,但这意味着必须在每个操作中将其传递到我的存储库中,并将其包含在几个UI元素的ViewData中。我更希

我正在编写一个用于管理多个子网站的区域,几乎所有功能在每个网站上都是相同的(添加/编辑/删除页面等),我的实例化存储库采用SiteIdentity,因此所有数据访问方法都与此无关。我现在的问题是试图让我的行动方法也不可知

我想使用的URL模式大致如下:

“外部站点/{identity}/{controller}/{action}/{id}”

一种简单的方法是让每个操作都使用identity参数,但这意味着必须在每个操作中将其传递到我的存储库中,并将其包含在几个UI元素的ViewData中。我更希望这种事情在控制器中发生一次,比如在它的构造函数中


最好的方法是什么?目前,我能想出的最好办法是尝试从RoutedData字典中查找和转换标识,但我的一部分感觉应该有一个更优雅的解决方案。

您可以在
Request.RequestContext.RoutedData
中访问您的路由值,因此您可以创建基本控制器和公共属性SiteIdentity,在这种情况下,您可以从所有继承的控制器中的所有操作访问它。

听起来好像每次您有一个特定的参数名(也称为RoutedData字典键)时,都要使用OnActionExecuting或自定义ModelBinder来执行该逻辑

  • ,

  • 这就是我认为NactionExecuting似乎是最好的方法的方向。为了进一步扩展,我在控制器上创建了一个方法来设置与身份相关的属性,为该方法创建了一个接口,并让actionfilter调用该方法。这使我能够为不同的控制器提供不同的逻辑。