在ASP.NET网站上路由(不是WebForm应用程序而不是MVC)

时间:2011-10-05 10:47:10

标签: asp.net routing web-config global-asax

我可以使用web.config或Global.asax在asp.net网站(文件夹结构)中进行路由吗?

基本上我想要

http://www.something.com/agents/10/TheAgentsName

转到

http://www.something.com/portfolio.aspx?caid=10

代理商名称仅适用于网址中的“装饰”。

我找到了几个例子,但它们都适用于MVC或WebForms应用程序。

在尝试实现Global.asax时,它一直说命名空间中不存在System.Web.Routing。这就是我的Global.asax现在的样子(它无法运行)!

<%@ Application Language="C#" %>
<%@ Import Namespace="System.Web.Routing" %>

<script runat="server">

    void Application_Start(object sender, EventArgs e) 
    {
        RegisterRoutes(System.Web.Routing.RouteTable.Routes);

    }

    void RegisterRoutes(System.Web.Routing.RouteCollection routes)
    {
        routes.MapPageRoute("AgentPortfolioByName", "agents/{id}/{name}", "portfolio.aspx");
    }

    void Application_End(object sender, EventArgs e) 
    {
    }

    void Application_Error(object sender, EventArgs e) 
    { 
    }

    void Session_Start(object sender, EventArgs e) 
    {
    }

    void Session_End(object sender, EventArgs e) 
    {
    }

</script>

Global.asax Application_Start执行正常(我试图设置一个断点)。但它只是不明白System.Web.Routing是什么。在web.config中,我有以下条目:

<compilation debug="true">
            <assemblies>
                <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></assemblies>
        </compilation>

...

<httpModules>
            <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add name="RoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        </httpModules>

........

<system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
        <modules>
            <remove name="ScriptModule"/>
            <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </modules>

1 个答案:

答案 0 :(得分:0)

您可以使用Global.asax实现路由。我想你在某种程度上错过了应用程序中的System.Web.Routing.dll引用。请确保您参考这个。另外,请确保在Global.asax中导入System.Web.Routing命名空间。如果有助于理解网站应用程序中处理Global.asax文件,请查看以下链接。

http://beyondrelational.com/blogs/niladribiswas/archive/2011/06/09/adding-the-global-asax-cs-file-in-asp-net-web-site.aspx

请随时联系以进一步讨论。

谢谢,