我已经创建了一个新的ASP.NET MVC 5项目,其中包含个人用户身份验证。然后我继续将Unity IoC作为一个软件包安装并通过在UnityConfig.cs
内执行以下操作进行配置:
public static void RegisterTypes(IUnityContainer container)
{
container.RegisterTypes(AllClasses.FromLoadedAssemblies(), WithMappings.FromMatchingInterface, WithName.Default);
container.RegisterType<AccountController>(new InjectionConstructor());
}
从我通过Google阅读的内容中,我们应该注意Unity将选择具有大多数参数的构造函数的事实。我的AccountController.cs
有以下两个构造函数。
private ApplicationSignInManager _signInManager;
private ApplicationUserManager _userManager;
public AccountController()
{
}
public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager )
{
UserManager = userManager;
SignInManager = signInManager;
}
但我仍然遇到问题。当我导航到http://localhost:xxxx/account/login
时,我收到 404错误!
这是我的RouteConfig.cs
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Artist",
url: "{controller}/{urlfriendly}/{action}",
defaults: new { controller = "Artist", action = "Index" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
答案 0 :(得分:1)
我怀疑,问题在于您的路线。
将路径视为c#中的switch case语句。您遇到的问题是,只要第一条路线遇到任何 3段路线,它就会始终匹配。因此,任何正常的/controller/action/id
都不会达到您的默认路线。
路线中需要有一个或多个约束和/或一个或多个显式段,以确保在某些时候没有匹配,或者您已基本完成无法访问的执行路径。
以下是显式段的示例。
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Artist",
url: "Artist/{urlfriendly}/{action}",
defaults: new { controller = "Artist", action = "Index" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);