【问题标题】:Unable to use MVC Controller with ASP.Net Web API 2无法将 MVC 控制器与 ASP.Net Web API 2 一起使用
【发布时间】:2018-01-25 00:03:26
【问题描述】:

我目前所拥有的(有效)

我有一个 ASP.Net Web API 2 项目。好吧,至少那是我记得在设置项目时创建的,我不确定如何确认。

我正在使用 Visual Studio 2017 和 .Net Framework 4.6 版。

就 API 方面而言,这一切都很好。 API 控制器很好,我可以获取数据、发布数据等。

只是一些额外的信息,以防万一,我已将 SignalR 添加到已配置的项目中。

因为它可能很重要,这里是我的各种配置文件:

Global.asax.cs

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    GlobalConfiguration.Configure(WebApiConfig.Register);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

RouteConfig.cs

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { action = "Index", id = UrlParameter.Optional }
    );
}

WebApiConfig.cs

public static void Register(HttpConfiguration config)
{
    // Configure Web API to use only bearer token authentication.
    config.SuppressDefaultHostAuthentication();
    config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

    // Web API routes
    config.MapHttpAttributeRoutes();

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{action}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
}

我正在尝试做的事情(不起作用)

但是,我想添加一个 HTML 页面,以便用户可以查看一些信息(只是静态的 HTML 内容,没什么特别的)。所以我创建了一个标准的 MVC 控制器,其操作如下(并且 Index.cshtml 视图位于正确的 Views 文件夹中):

public class NotificationsController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

问题是这个动作永远不会运行(我有一个断点)。

我试图找出问题的原因

现在我明白了,它可能有很多不同的东西,所以这是我迄今为止尝试调试问题的方法:

当我在浏览器中访问 URL(例如http://localhost:59461/Notifications)时,我得到:

localhost 当前无法处理此请求。 HTTP 错误 500

起初我以为这可能是路由问题,但是在 VS 2017 中,您可以看到此操作的请求失败:

那么确定路由必须正常工作吗?不幸的是,单击请求仅确认 500 错误,并没有提供有关该问题的更多信息。

我能找到的唯一附加信息是在 Windows 事件查看器中,我在其中收到以下错误:

物理根目录为“C:\PATH TO PROJECT FOLDER\”的应用程序“MACHINE/WEBROOT/APPHOST/PROJECTNAME”无法使用命令行“%LAUNCHER_PATH% %LAUNCHER_ARGS%”启动进程,错误代码 = '0x80070002 : 0。

但是我已经对该错误进行了很多研究,但尚未找到适合我的问题的解决方案或解释。

我也尝试过添加Application_Error,但这也没有引发任何异常。

此时我不知道如何找出问题的原因。我唯一能想到的是我需要专门配置一些东西以允许 Web API 项目与 MVC 控制器一起工作,但我也找不到任何东西。

如何正确调试此问题并找到原因?

【问题讨论】:

  • 不,您不需要“特殊”配置即可一起运行它们。您只需要确保路由不冲突。听起来您需要注意 Application_Error 事件并向您的应用程序添加正确的日志记录。
  • 如果你只想要一个静态的 html 页面,只需将一个 html 文件放到根目录或任何你想要的地方。由于 WebApi 仍然是 asp.net,因此它将毫无问题地提供页面服务。如果你只想要一个静态页面,不需要引入 mvc。
  • @mason:我确实配置了异常处理,但它没有捕获任何东西(它适用于普通代码异常)。为了确保这不会引起问题,我刚刚完全删除了它,问题仍然完全相同。用 VS 运行它不应该向我显示执行期间发生的任何异常吗?
  • 您确实需要创建一个minimal reproducible example。我会从头开始。做一个新的 Web 应用程序,然后开始复制旧应用程序的功能。在每一步测试它。这样你就可以很快搞清楚。
  • 只是一些想法:你有HomeControllerIndex 操作吗?我正在考虑“找不到路径'/'的控制器或未实现 IController。”错误。另外 - 我知道你没有使用 Kestrel - 你看过这个帖子吗? stackoverflow.com/questions/41992280/…你能比较一下你的工作测试项目和这个坏掉的项目之间的 IISExpress 设置吗?

标签: c# asp.net-mvc asp.net-web-api2


【解决方案1】:

呃……所以我解决了这个问题……

偶然发现this post后,有建议删除Visual Studio解决方案文件夹中的.vs文件夹。完成此操作并重建解决方案后,它开始工作。

不知道那个文件夹中到底是什么导致了这个问题,也许有什么东西被破坏了或者某种缓存冲突,谁知道呢......

【讨论】:

    猜你喜欢
    • 2018-07-20
    • 2013-10-01
    • 1970-01-01
    • 2016-05-20
    • 2015-10-17
    • 2016-01-06
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    相关资源
    最近更新 更多