如何将页面路由到MVC 5中的属性路由

时间:2016-05-27 21:02:04

标签: c# asp.net asp.net-mvc asp.net-mvc-routing

我正在将一些旧的aspx页面迁移到一个闪亮的基于MVC的新架构。但是,在转换过程中,我仍然需要支持旧路由,只需重定向或呈现相关的mvc操作。

我遇到的问题是,用于处理多种用途的1个aspx现在是多个MVC操作。

我认为我可以使用自定义RouteBase:

        routes.Add("legacy", new LegacyPageOverride());

看起来像:

    public override RouteData GetRouteData(HttpContextBase httpContext)
    {
        if (httpContext.Request.Headers == null)
            return null;

        if (httpContext.Request.Url == null)
            return null;

        if (httpContext.Request.Url.AbsolutePath.StartsWith("/legacy/login/default.aspx", StringComparison.OrdinalIgnoreCase))
            return LoginRoute(httpContext.Request);

        return null;
    }

    private RouteData LoginRoute(HttpRequestBase httpRequestBase)
    {
        if (httpRequestBase?.Url == null)
            throw new ArgumentNullException(nameof(httpRequestBase));

        var routeData = new RouteData(this, new MvcRouteHandler());
        routeData.Values.Add("controller", "Account");

        if (httpRequestBase.Form["SAMLResponse"] != null || 
            httpRequestBase.QueryString["SAMLResponse"] != null)
        {
            routeData.Values.Add("action", "SAML");
        }
        else if (httpRequestBase.QueryString["logged_out"] != null)
        {
            routeData.Values.Add("action", "logoff");
        }
        else
        {
            routeData.Values.Add("action", "SignIn");
        }
        return routeData;
    }

    public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
    {
        return null;
    }

我已经调试过了,但是虽然这个逻辑正在触发,而GetRouteData正在返回一个RouteData对象,但我仍然收到了404.

我试过了:

routes.RouteExistingFiles = true(和false)。

删除我试图覆盖路径的文件。

尝试从web.config中删除staticFile模块。

我无法使用UrlRewriting,因为我无法在托管该网站的所有网络服务器上安装该模块。我还需要根据POST参数进行路由,并将这些参数重新提交到结果页面。

更新

我把它缩小到属性路由。如果我在特定的控制器操作上禁用它,一切正常。

所以这不起作用:       〔路线(“登录)]       public ActionResult Login()

这样做:       public ActionResult Login()

任何想法如何使它工作?我读了一些MS_DirectRouteMatches?

0 个答案:

没有答案