1

我有一个混合的 asp.net web 表单/mvc 应用程序,我最近使用 mvc2 转换为 .net 4。我已经将该应用程序设置为在 IIS 7.5(在 Windows 7 上)上运行,并且网站的 Web 表单部分运行正常,但 MVC 部分不是。每当我尝试访问需要通过路由引擎的页面时,我都会得到

HTTP 错误 404.0 - 未找到
您要查找的资源已被删除、名称已更改或暂时不可用。
模块 IIS Web 核心
通知 MapRequestHandler
处理程序 StaticFile
错误代码 0x80070002

我正在通过 VS2010 调试这个网站(所以我已经设置为使用 IIS 而不是 Cassini),当我在 Application_Start 函数中放置一个断点时,它永远不会被命中,所以路由永远不会被注册。当我在其中一个 aspx 页面代码隐藏中的 Page_Load 函数中放置一个断点时,它会被命中。所以看来问题是路由没有被注册。

我错过了什么?

4

3 回答 3

1

根据我使用 ASP.NET MVC 的经验,我发现Default.aspxIIS 需要一个页面才能正常运行。我正在使用 ASP.NET MVC 1 模板中包含的页面。不幸的是,ASP.NET MVC 2 不包含此页面(据我所知),因此您应该将以下内容添加到您的项目中:

默认.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="YourNamespace._Default" %>

<%-- Please do not delete this file. It is used to ensure that ASP.NET MVC is activated by IIS when a user makes a "/" request to the server. --%>

默认.aspx.cs:

using System.Web;
using System.Web.Mvc;
using System.Web.UI;

namespace YourNamespace
{
    public partial class _Default : Page
    {
        public void Page_Load(object sender, System.EventArgs e)
        {
            // Change the current path so that the Routing handler can correctly interpret
            // the request, then restore the original path so that the OutputCache module
            // can correctly process the response (if caching is enabled).

            string originalPath = Request.Path;
            HttpContext.Current.RewritePath(Request.ApplicationPath, false);
            IHttpHandler httpHandler = new MvcHttpHandler();
            httpHandler.ProcessRequest(HttpContext.Current);
            HttpContext.Current.RewritePath(originalPath, false);
        }
    }
}
于 2010-08-30T02:40:18.787 回答
0

我记得在某处读过有关 Global.asax 事件没有触发的类似问题。尝试删除 Global.asax 文件并再次添加(只需记住重新添加所需的路由代码)。

于 2010-05-18T06:06:23.927 回答
0

我有一个 WebForms,当我添加 API 文件时,我也需要更改我的 global.asax 文件。我所做的只是创建一个新的空白 API 项目,然后复制文件。当您在 global.asax 文件中添加文本时,您会被告知您需要的其他库(例如 WebApiConfig)。只需跟随小径。

于 2017-11-11T04:32:22.753 回答