asp.net - Url.Action 不使用所需的输出路径

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

我的 MVC3 网站中有以下路由定义:

routes.MapRoute(
                "FB", // Route name
                "fb/{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            ).RouteHandler = new RH();

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

我的自定义“RH”处理程序的代码是

public class RH : MvcRouteHandler
    {
        protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
        {
            //here I store somewhere that 'fb' prefix is used, so logic is different in some places
            return base.GetHttpHandler(requestContext);
        }
    }

我想要实现的目标是,当使用“fb”子路径前缀访问我的网站时,我的网站逻辑执行方式会略有不同。

问题是,当我正常访问我的网站时(例如 http://localhost ),那么当我执行时

Url.Action('action' 'controller')

,则输出为“http://localhost/fb/controller/action”。

我想实现,当使用“fb”前缀子路径访问我的网站时,我的 Url.Action 调用输出/fb/controller/action 路径,并且如果我正常访问网站(没有“fb”前缀子路径) ),然后 Url.Action 调用输出/controller/action

最重要的是,/fb/controller/actions 必须路由到与通过/controller/action 格式访问站点时相同的 Controller /操作。

当我使用“fb”前缀时,“fb”路由只需要存储一些临时信息。

最佳答案

似乎我找到了基于此链接( MVC 3 Routing and Action Links not following expected contextual Route )的解决方案,引入了新的路径占位符并添加了约束。

也许它不够好,或者你比这更了解,但似乎对我有用:

routes.MapRoute(
        "FB", // Route name
        "{path}/{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
        new { path = "fb" }
).RouteHandler = new RH();

routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

关于asp.net - Url.Action 不使用所需的输出路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10155325/

相关文章:

c# - 在网格中交互控件

c# - 新手 View 模型问题..子类化或不子类化

javascript - AJAX PageMethods 与路由冲突?

java - 如何将两个 URL 路由映射到 Spring MVC (3.0) 中的同一个处理程序方法?

php - 如何将波斯语字符串作为 URL 中的参数传递?

asp.net - 如何清除模式弹出窗口中iframe标签的多个YouTube网址?

asp.net - 使文本框不可编辑

asp.net-mvc-3 - 使用 Autofac 进行 MVC 3 通用存储库注入(inject)

javascript - 当 asp :Textbox disabled 时禁用 DatePicker

asp.net - 配置错误 : <compilation debug ="true" targetFramework ="4.0"> ASP. NET MVC3