无法将 MVC 控制器与 ASP.Net Web API 2 一起使用
Unable to use MVC Controller with ASP.Net Web API 2
我目前拥有的(有效)
我有一个 ASP.Net Web API 2 项目。好吧,至少这是我记得在设置项目时创建的内容,我不确定如何确认。
我正在使用 Visual Studio 2017 和 .Net Framework 4.6 版。
就 API 方面而言,这一切都很好。 API控制器很好,我可以获取数据,post数据等
只是一些附加信息,以防万一,我已将 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 is currently unable to handle this request.
HTTP ERROR 500
起初我以为这可能是路由问题,但是在 VS 2017 中您可以看到此操作的请求失败:
那么路由肯定工作正常吗?不幸的是,单击请求仅确认 500 错误,并没有提供有关该问题的更多信息。
我能找到的唯一附加信息是在 Windows 事件查看器中,我在其中收到以下错误:
Application 'MACHINE/WEBROOT/APPHOST/PROJECTNAME' with physical root 'C:\PATH TO PROJECT FOLDER\' failed to start process with commandline '%LAUNCHER_PATH% %LAUNCHER_ARGS%', ErrorCode = '0x80070002 : 0.
但我对这个错误进行了大量研究,但尚未找到适合我的问题的解决方案或解释。
我也试过添加 Application_Error
但这也没有抛出任何异常。
此时我不知道如何找出问题的原因。我唯一能想到的是我需要专门配置一些东西以允许 Web API 项目与 MVC 控制器一起工作,但我也找不到任何东西。
如何正确调试此问题并找到原因?
呃...所以我解决了问题...
偶然发现this post后,有建议删除Visual Studio解决方案文件夹中的.vs文件夹。这样做并重建解决方案后,它开始工作了。
不知道那个文件夹中到底是什么导致了这个问题,也许是某些东西被破坏了或者某种缓存冲突,谁知道呢...
我目前拥有的(有效)
我有一个 ASP.Net Web API 2 项目。好吧,至少这是我记得在设置项目时创建的内容,我不确定如何确认。
我正在使用 Visual Studio 2017 和 .Net Framework 4.6 版。
就 API 方面而言,这一切都很好。 API控制器很好,我可以获取数据,post数据等
只是一些附加信息,以防万一,我已将 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 is currently unable to handle this request. HTTP ERROR 500
起初我以为这可能是路由问题,但是在 VS 2017 中您可以看到此操作的请求失败:
那么路由肯定工作正常吗?不幸的是,单击请求仅确认 500 错误,并没有提供有关该问题的更多信息。
我能找到的唯一附加信息是在 Windows 事件查看器中,我在其中收到以下错误:
Application 'MACHINE/WEBROOT/APPHOST/PROJECTNAME' with physical root 'C:\PATH TO PROJECT FOLDER\' failed to start process with commandline '%LAUNCHER_PATH% %LAUNCHER_ARGS%', ErrorCode = '0x80070002 : 0.
但我对这个错误进行了大量研究,但尚未找到适合我的问题的解决方案或解释。
我也试过添加 Application_Error
但这也没有抛出任何异常。
此时我不知道如何找出问题的原因。我唯一能想到的是我需要专门配置一些东西以允许 Web API 项目与 MVC 控制器一起工作,但我也找不到任何东西。
如何正确调试此问题并找到原因?
呃...所以我解决了问题...
偶然发现this post后,有建议删除Visual Studio解决方案文件夹中的.vs文件夹。这样做并重建解决方案后,它开始工作了。
不知道那个文件夹中到底是什么导致了这个问题,也许是某些东西被破坏了或者某种缓存冲突,谁知道呢...