Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法将MVC控制器与ASP.Net Web API 2一起使用_C#_Asp.net Mvc_Asp.net Web Api2 - Fatal编程技术网

C# 无法将MVC控制器与ASP.Net Web API 2一起使用

C# 无法将MVC控制器与ASP.Net Web API 2一起使用,c#,asp.net-mvc,asp.net-web-api2,C#,Asp.net Mvc,Asp.net Web Api2,到目前为止我所拥有的(有效) 我有一个ASP.NETWebAPI2项目。好吧,至少我记得我在建立项目时创建了这个,我不知道如何确认这一点 我正在使用Visual Studio 2017和.Net Framework 4.6版 就API方面而言,这一切都非常有效。API控制器很好,我可以获取数据、发布数据等 为了以防万一,我在已经配置的项目中添加了SignalR 可能很重要,以下是我的各种配置文件: Global.asax.cs protected void Application_Start()

到目前为止我所拥有的(有效)

我有一个ASP.NETWebAPI2项目。好吧,至少我记得我在建立项目时创建了这个,我不知道如何确认这一点

我正在使用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视图位于正确的视图文件夹中):

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

我试图找出问题的原因

现在我明白了,可能会有很多不同的东西,所以这里是我到目前为止试图调试的问题:

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

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

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

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

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

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

但我已经对这个错误进行了很多研究,还没有找到一个合适的解决方案或解释我的问题

我还尝试添加
应用程序\u错误
,但这也不会引发任何异常

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


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

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

绊倒之后,建议删除Visual Studio解决方案文件夹中的.vs文件夹。完成此操作并重建解决方案后,它开始工作


不知道文件夹中到底是什么导致了这个问题,可能是什么东西被破坏了,或者是某种缓存冲突,谁知道…

不,您不需要“特殊”配置来一起运行它们。您只需要确保路由不冲突。听起来您需要注意
Application\u Error
事件,并在应用程序中添加正确的日志记录。如果您只需要一个静态html页面,只需在根目录中或任何您想要的地方放置一个html文件。由于WebApi仍然是asp.net,它将毫无问题地为页面提供服务器。如果您只需要一个静态页面,则无需引入mvc。@mason:我配置了异常处理,但它没有捕获任何内容(它对正常代码异常非常有效)。为了确保这不会造成问题,我刚刚完全消除了它,问题仍然是一样的。用VS运行这个程序不应该显示执行期间发生的任何异常吗?您确实需要创建一个。我会从头开始。创建一个新的web应用程序,然后开始复制旧应用程序的功能。每一步都要进行测试。这样你就可以很快找到答案。只是想一想:你有一个带有
索引的
家庭控制器吗?我正在考虑“路径“/”的控制器未找到或未实现IController。”错误。还有——我知道你没有用红隼——你见过这条线吗?你能比较一下你的工作测试项目和这个失败的项目之间的IISExpress设置吗?
public class NotificationsController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}