gpt4 book ai didi

asp.net-mvc - 如何在混合的 MVC 和 Web 窗体上路由网页

转载 作者:行者123 更新时间:2023-12-01 09:57:51 25 4
gpt4 key购买 nike

我创建了一个混合 MVC 和 Web 窗体的网站 - 使用后来的 Visual Studio 2013 工具很容易做到。一切正常,我可以正确导航到 MVC 和 Web 表单页面。

然而,我想做的是将我所有的 Web 表单页面放在一个特定的子目录中,然后在不使用子目录的情况下路由到它们。

/
+ Content
+ Controllers
+ Models
+ Scripts
+ Views
+ WebPages
+ Default.aspx
+ MyWebForm.aspx

所以我希望能够访问:

/WebPages/Default.aspx   as /Default.aspx or even just /
/WebPages/MyWebForm.aspx as /MyWebForm.aspx

这可能吗?

任何建议将不胜感激。

最佳答案

作为一个起点,我们可以在 App_Start/RouteConfig.cs 中为 webforms 页面添加特定的路由:

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

//specific page route
routes.MapPageRoute("forms", "forms", "~/Webforms/RootForm.aspx");

//specific pattern to a directory
routes.MapPageRoute("webformsmap", "{page}.aspx", "~/Webforms/{page}.aspx");


routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}

编辑

经过一番研究,我找到了您正在寻找的东西。我创建了一个有用的自定义 IRouteHandler 来实现更好的功能。通过这种方式,您可以将 Webforms *.aspx 页面的整个目录映射到单个路由。看看吧:

public class DirectoryRouteHandler : IRouteHandler
{
private readonly string _virtualDir;

public DirectoryRouteHandler(string virtualDir)
{
_virtualDir = virtualDir;
}

public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
var routeValues = requestContext.RouteData.Values;

if (!routeValues.ContainsKey("page")) return null;

var page = routeValues["page"].ToString();
if (!page.EndsWith(".aspx"))
page += ".aspx";
var pageVirtualPath = string.Format("{0}/{1}", _virtualDir, page);

return new PageRouteHandler(pageVirtualPath, true).GetHttpHandler(requestContext);
}
}

通过使用 DirectoryRouteHandler,您可以很好地实现您的目标。

url "~/somepage.aspx"将被映射到 "~/WebForms/somepage.aspx"

routes.Add("rootforms", new Route("{page}.aspx", 
new DirectoryRouteHandler(virtualDir: "~/WebForms")));

url "~/forms/somepage"将被映射到 "~/WebForms/somepage.aspx"

routes.Add("webforms", new Route("forms/{page}", 
new DirectoryRouteHandler(virtualDir: "~/WebForms")));

关于asp.net-mvc - 如何在混合的 MVC 和 Web 窗体上路由网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21887900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com