Tag: 路由

在ASP.NET MVC 3中为控制器设置默认操作(而不是索引)

我有一个名为Dashboard的控制器,其中包含3个操作: Summary , Details和Status ,其中任何一个都不带ID或任何其他参数。 我希望URL /Dashboard路由到Dashboard控制器的Summary操作,如/Dashboard/Summary那样,但我无法找出添加路由的正确方法。 在Global.asax.cs ,我有以下内容: routes.MapRoute( “Default”, // Route name “{controller}/{action}/{id}”, // URL with parameters new {controller = “Home”, action = “Index”, id = UrlParameter.Optional} // Parameter defaults ); routes.MapRoute( “/Dashboard”, “Dashboard”, new { controller = “Dashboard”, action = “Summary” } ); 对于第二部分,我也尝试过: routes.MapRoute( “/Dashboard”, “{controller}”, new { controller = “Dashboard”, […]

是否可以在.NET 4中动态创建路由?

在我们的应用程序中,我们使用新的.NET 4路由系统将某些请求路由到站点的其他部分。 我们只允许在晚上发布我们的网站代码,这意味着我们必须迟到工作以发布任何代码更改。 我们经常需要创建自定义路由以支持旧内容的旧链接并将其路由到新内容。 这些通常是需要的,因为我们的路由是在编译的global.asax中定义的,当我们立即需要这些,但是不能进行代码推送时,我们会陷入僵局。 有没有办法我们可以在某种配置文件中定义路由并让网站以编程方式读取它们而无需重新启动应用程序?

ASP.NET路由 – 忽略具有特定扩展名的文件的路由,而不管目录如何

假设我想删除具有特定文件扩展名的文件的任何映射路由。 RouteTable.Routes.Ignore(“{root}.hello”); 适用于根目录中具有扩展名.hello任何文件,但是只要进入任何子文件夹,就不会应用“忽略”规则。 我已经尝试了很多不同的组合,但似乎没有得到一个不抛出编译器exception,或无法工作?

获取所有路线的列表

在ASP.NET Core中,有没有办法查看Startup中定义的所有路由的列表? 我们使用IRouteBuilder的MapRoute扩展方法来定义路由。 我们正在迁移旧的项目WebAPI项目。 我们可以使用GlobalConfiguration.Configuration.Routes来获取所有路由。 更具体地说,我们在动作filter中执行此操作。 public class MyFilter : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext actionContext) { base.OnActionExecuting(actionContext); // This no longer works // var allRoutes = GlobalConfiguration.Configuration.Routes; // var allRoutes = ??? } }

是否有可能在ASP.NET MVC路径到达控制器之前更改它的querystring变量?

我在ASP.NET MVC中有一个控制器方法,如下所示: public ActionResult GetAlbumPictures(int albumId) { var album = AlbumRepo.GetSingle(albumId); var pictures = album.Pictures; return View(pictures); } 此方法的路由如下所示: routes.MapRoute(null, “pictures” new { controller = “Album”, action = “GetAlbumPictures” }); 用户将使用以下URL获取图片,按照相册ID进行过滤: GET http://server/pictures?albumid=10 但是,我想将querystring参数更改为album而不是albumid : GET http://server/pictures?album=10 这意味着需要将控制器方法修改为: public ActionResult GetPictures(int album) { … } 但是,这并不理想,因为现在该方法有一个名为album的参数,可以将其混淆为Album 对象而不是Album的ID 。 我的问题是,有没有办法配置ASP.NET MVC,以便在路由中,它将收到一个名为album的查询字符串参数,但然后将其作为albumId参数传递给控制器​​? PS我知道我可以在路由表中执行此操作: routes.MapRoute(null, “album/{albumId}/pictures”, new { […]

当文件实际存在于指定位置时的MVC路由

所以我在IIS 7下运行的MVC 3应用程序中有这样的路由: routes.MapRoute( “VirtualTourConfig”, “virtualtour/config.xml”, new { controller = “VirtualTour”, action = “Config” } ); 诀窍是文件实际存在于/virtualtour/config.xml中。 似乎请求只是在该位置返回xml文件而不是命中路径,该路由处理XML,进行一些更改并返回自定义XmlResult。 有关如何告诉我的应用程序命中路由而不是文件存在于磁盘上的实际文件的任何建议? 编辑:看来我可以使用routes.RouteExistingFiles = true; 在Global.asax的RegisterRoutes方法中告诉应用程序忽略磁盘上的文件。 但是,这会在全局范围内设置标志并在应用程序中中断许多其他请求。 例如,我仍然希望调用/assets/css/site.css来返回CSS文件,而无需为每个静态资产专门设置路由。 那么现在的问题是,有没有办法在每个路由的基础上做到这一点?

从任意URL手动实例化Controller实例?

我的技能让我失望,我知道我已经看到了这个代码,但我找不到它。 获取任意URL的最快方法是什么,通过asp.net mvc路由系统运行它,并在另一端引用控制器实例? 例如,代码执行在一些任意控制器方法中。 我想做这样的事情: … string myURL = “http://mysite/mycontroller/myaction/myparameters”; RouteData fakeRouteData = new RouteData(Route???, IRouteHandler???) RequestContext ctxt = new RequestContext(this.ControllerContext.HttpContext, fakeRouteData); ControllerFactory factory = ControllerBuilder.Current.GetControllerFactory(); Controller result = factory.CreateController(ctxt, controllername???) 我正在尝试获取控制器的实例,就像路由系统一样,无论代码在哪里执行。 我不清楚在这一点上如何将各个部分组合在一起。 虽然我最终会发现它,但我想我可以通过询问来节省时间;)

Asp.Net MVC:如何获取当前控制器/视图的虚拟URL?

是否可以获取与控制器操作或视图关联的路由/虚拟URL? 我看到Preview 4添加了LinkBuilder.BuildUrlFromExpression助手,但是如果你想在master上使用它,它不是很有用,因为控制器类型可能不同。 任何想法都表示赞赏。

asp.net mvc本地化

我正在尝试使用路由实现本地化 我有以下内容: routes.MapRoute( “DefaultLocalized”, “{lang}/{controller}/{action}/{id}”, new { controller = “Home”, action = “Index”, id = “”, lang = “en” } ); routes.MapRoute( “Default”, “{controller}/{action}/{id}”, new { controller = “Home”, action = “Index”, id = “” } ); 当我调用我的页面domain/en/home/index ,它工作正常,但是当我调用domain/home/index我得到错误404:找不到资源。 此外,当我在domain/en/home/index并且我点击一个安全页面时,我被重定向到domain/Account/login ,我如何被重定向到domain/en/Account/login ? 另外,当我收到应用程序错误时,如何将其重定向到domain/en/home/error ? 真正的问题是如何使用语言作为路由参数实现本地化?

使用Web窗体的URL路由和Favicon的StopRoutingHandler

我有一个网站,我需要添加一个Favicon.ico。 该站点使用带有路由的ASP.NET 3.5 Web窗体编写。 问题是Favicon链接始终返回页面未找到错误。 这是因为路由不知道Favicon.ico的链接应该去哪里,所以它返回Not Found页面。 我试图为favicon添加一个StopRoutingHandler,但它们似乎都不起作用。 以下是我到目前为止尝试过的内容: routes.Add(new Route(“MasterPages/{favicon}.ico”, new StopRoutingHandler())); routes.Add(new Route(“{favicon}.ico”, new StopRoutingHandler())); routes.Add(new Route(“favicon.ico”, new StopRoutingHandler())); routes.Add(new Route(“favicon.ico/{*pathInfo}”, new StopRoutingHandler())); 有谁知道我应该使用什么? 我的favicon.ico链接我试过看起来像这样: 它们位于我的标签内。 另外,作为最后一点,我不使用MVC,因为如果我是,我可以使用它: routes.IgnoreRoute(“{*favicon}”, new {favicon=@”(.*/)?favicon.ico(/.*)?”}); 遗憾的是,IgnoreRoute不适用于Routing Web Forms,因为它不是MVC应用程序。