【发布时间】: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 应用程序,然后开始复制旧应用程序的功能。在每一步测试它。这样你就可以很快搞清楚。
-
只是一些想法:你有
HomeController和Index操作吗?我正在考虑“找不到路径'/'的控制器或未实现 IController。”错误。另外 - 我知道你没有使用 Kestrel - 你看过这个帖子吗? stackoverflow.com/questions/41992280/…你能比较一下你的工作测试项目和这个坏掉的项目之间的 IISExpress 设置吗?
标签: c# asp.net-mvc asp.net-web-api2