这似乎应该很容易,但是由于某种原因,我没有运气。我正在将现有的WebForms应用程序迁移到MVC,因此我需要将站点的词根指向我现有的ASPX页面,并且仅将路由应用于命名路由。这是我所拥有的:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");

        RouteTable.Routes.Add(
            "Root",
            new Route("", new DefaultRouteHandler())
        );

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

因此,应忽略ASPX页面,并且该处理程序应处理默认的根网址:

public class DefaultRouteHandler : IRouteHandler
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        return System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(
                "~/Dashboard/default.aspx", typeof(Page)) as IHttpHandler;
    }
}

这似乎还可以,但是由此产生的YPOD给了我这一点:

发现具有相同ID的多个控件“ __page”。跟踪要求控件具有唯一的ID。

这似乎意味着该页面是某种程度上渲染的两次。如果我直接在仪表板页面上输入URL,则可以正常工作(没有路由,没有错误)。我不知道为什么处理程序代码会做不同的事情。

底线 - 我想简单地将根URL路径重定向到我选择的ASPX - 有人可以散发一些光吗?

有帮助吗?

解决方案 2

嗯。因此,我的浏览器出于某种无关的原因崩溃了,现在我已经重新启动了它,上面的代码似乎按预期的是完美地工作。由于浏览器重新启动,我对现在的服务器端代码的作用方式完全不同(显然我猜是某种程度上被错误地缓存了),但是看来这是一个非问题。

编辑: :嗯,这实际上仍然是一个问题 - 不确定为什么它以前起作用,但是有点随机。最重要的是,MVC似乎与Trace.AXD解析器在某些情况下产生完美有效的标记。我真的没有很好的解释,但是禁用Web.config绕过错误的跟踪。就我的目的而言,这已经足够好了,但是我很想听听别人的更好解释...

其他提示

我不太了解您的问题,可能我的熟练程度不够。无论如何我会尝试...;)

如果要从根路径重定向,为什么不使用IIS的默认文档,将其放在index.aspx中,然后在此页面中添加响应。将您重定向到的页面retlect。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top