我正在从事在.net Framework 4上完成的Web窗体项目中的工作。我们希望开始在MVC中工作新功能,并开始缓慢迁移旧的旧功能,我们力图充分利用拥有MVC的功能与aspx一起。这最初是asp.net Web窗体项目。
我从添加MVC开始。由于该项目针对框架4,所以我安装了MVC 4.0.40804。此时的升级框架可能很麻烦,并且需要重构大量代码。
到目前为止,组件的安装很好,并且该项目尚待解决。我开始检查aspx文件是否仍然有效。和繁荣。他们没有。我收到404错误。默认页面为 Account / Login.aspx ,但已更改为 Account / Login?ReturnUrl =%2fAccount%2fLogin.aspx 。
因此,我开始检查并找到this article from Scott Hanselman,并尝试配置RouteConfig文件,但是没有任何效果。现在我的文件看起来像这样。
public static void RegisterRoutes(RouteCollection routes)
{
//THIS IS ADDED BY VS
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//THIS I ADDED AT FIRST UPDATE
routes.IgnoreRoute("Account/{myWebForms}.aspx/{*pathInfo}");
routes.IgnoreRoute("{myWebForms}.aspx/{*pathInfo}");
//THIS I ADDED SECOND
routes.IgnoreRoute("Account/{*pathInfo}");
//THEN I ADDED THIS
routes.IgnoreRoute("Account/Login.aspx");
//THEN I ADDED THIS IN THE FINAL ATTEMPT
routes.MapPageRoute(
"login",
"Account/{myWebForm}",
"~/Account/Login.aspx"
);
//THIS IS DEFAULT CONFIG AND WAS HERE FROM THE BEGGINING
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new
{
controller = "Home",
action = "Index",
id = UrlParameter.Optional
}
);
}
任何尝试都没有改变行为,任何配置都会加载该帐户.Login.aspx WebForm符合预期,每次在调试中运行时都会显示相同的错误
如何配置?
另一件事,我以MVC 4的MVC电影入门指南为自己进行了指导。因此,请检查版本和文件。我尚未创建bundleConfig或webapiconfig类,仅创建了RouteConfig。
更新 这是Web配置文件中的和标记。除了这些标签之外,还包括未包含的连接字符串,应用程序设置和WCF服务设置的配置。
最后是一个带有Newtonsoft.json依赖项绑定的标签。
<system.web>
<httpRuntime requestValidationMode="2.0"/>
<compilation debug="true" targetFramework="4.0"/>
<authentication mode="Forms">
<forms loginUrl="~/Account/Login.aspx" timeout="2880"/>
</authentication>
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
<!-- <sessionState cookieless="AutoDetect" mode="StateServer" /> -->
</system.web>
答案 0 :(得分:1)
尽管将路由到login.aspx,但身份验证将基于URL。似乎表单身份验证不允许您未经身份验证就访问帐户/登录。
尝试将以下内容添加到您的web.config:
<configuration>
<location path="Account/Login">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
</configuration>
这可能有用。
编辑:
通过解释,标记中的*表示无论身份验证状态如何,任何人都可以访问此页面。如果您要为预先存在的Web表单页面添加任何其他路由,则如果它们应该是匿名的,则可能还需要为其添加标签。
如果将任何MVC页面(.cshtml)添加到应用程序,则应该能够在操作上使用[Authorize]和[AllowAnonymous]属性来控制对它们的身份验证,但是需要使用Web表单的自定义路由您的网络配置中的位置标记。