在RouteConfig中工作的路由相同,但不是AreaRegistration

时间:2014-04-30 15:19:15

标签: asp.net-mvc webforms routes asp.net-mvc-areas web-site-project

我正在Web站点项目(而不是Web应用程序)中工作,Web Forms和MVC很高兴地在这里工作。为了组织我的代码,我正在尝试使用MVC部件设置区域并且遇到这种情况。

我已经使用我的控制器设置了我的区域,并创建了以下区域配置:

Namespace Areas.Awesome

    Public Class AwesomeAreaRegistration
        Inherits AreaRegistration

        Public Overrides ReadOnly Property AreaName As String
            Get
                Return "Awesome"
            End Get
        End Property

        Public Overrides Sub RegisterArea(context As AreaRegistrationContext)

            context.MapRoute(
                "Awesome_default",
                "Awesome/{controller}/{action}/{id}",
                New With {.controller = "Sauce", .action = "Index", .id = UrlParameter.Optional},
                New String() {"Areas.Awesome"}
            )

        End Sub

    End Class

End Namespace

当我尝试导航到/Awesome/Sauce/时出现404错误,我的网站实际上尝试将我转到/Awesome/Sauce/Default.aspx

但是,当我将路线移至我的RouteConfig时:

Public Module RouteConfig

    Public Sub RegisterRoutes(ByVal routes As RouteCollection)
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
        routes.IgnoreRoute("{resource}.aspx/{*pathInfo}")

        routes.MapRoute(
            "Awesome_default",
            "Awesome/{controller}/{action}/{id}",
            New With {.controller = "Sauce", .action = "Index", .id = UrlParameter.Optional},
            New String() {"Areas.Awesome"}
        )
    End Sub

End Module

按预期方式提供/Awesome/Sauce/

我做了一些挖掘并同时创建了这两条路径,但是使用不同的URI,我发现它们都以相同的方式定义,但是一个正在工作,一个没有。

区域注册是否缺少某些东西会导致这些路由被忽略而RouteConfig中定义的路由不是?

1 个答案:

答案 0 :(得分:0)

可能与命名空间应用区域的方式有关。

请参阅this article

命名空间可能不完全符合该区域的条件。

public class ContactsAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "Contacts";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Contacts_default",
            "Contacts/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional },
            namespaces: new[] { "MvcApplication1.Areas.Contacts.Controllers" }
        );
    }
}