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

时间:2017-02-02 00:22:07

标签: .net asp.net-mvc visual-studio .net-core

我遇到了HTPP错误500,我不知道为什么。当我开始服务时,我弹出一个Chrome浏览器并导航到http://localhost:5000,然后弹出错误。 Chrome开发者工具窗口会显示以下错误:

Failed to load resource: the server responded with a status of 500 (Internal Server Error) http://localhost:5000/

这是我的Startup.cs文件(为简单起见,不包括使用语句):

namespace Tuner
{
    public class Startup
    {
        public static void Main(string[] args)
        {
            var exePath = Process.GetCurrentProcess().MainModule.FileName;
            var directoryPath = Path.GetDirectoryName(exePath);

                                var host = new WebHostBuilder()
               .CaptureStartupErrors(true)
               .UseKestrel()
               .UseUrls("http://localhost:5000")
               .UseContentRoot(Directory.GetCurrentDirectory())
               .UseIISIntegration()
               .UseStartup<Startup>()
               .Build();
            host.Run();
        }


        public Startup(IHostingEnvironment env)
        {
            //Setup Logger
            Log.Logger = new LoggerConfiguration()
                .WriteTo.Trace()
                .MinimumLevel.Debug()
                .CreateLogger();
            // Set up configuration sources.
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json");
            //.AddEnvironmentVariables();
            Configuration = builder.Build();
        }

        public IConfigurationRoot Configuration { get; set; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddSwaggerGen();

            services.AddMvc().AddJsonOptions(options =>
            {
                options.SerializerSettings.ContractResolver =
                    new CamelCasePropertyNamesContractResolver();
            });
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime lifetime)
        {

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseStaticFiles();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}");
            });


            lifetime.ApplicationStopping.Register(() =>
            {
                Log.Debug("Application Stopping. Do stuff.");
            });
        }
    }
}

使用MVC,这会导致调用HomeController Index方法:

namespace Tuner.Controllers
{
    public class HomeController : Controller
    {
        public string appVersion = typeof(HomeController).Assembly.GetName().Version.ToString();
        public string appName = "Empty Web App";

        [HttpGet("/")]
        public IActionResult Index()
        {
            var url = Request.Path.Value;
            if (url.EndsWith(".ico") || url.EndsWith(".map"))
            {
                return new StatusCodeResult(404);
            }
            else
            {
                // else block is reached
                return View("~/Views/Home/Index.cshtml");
            }
        }

        public IActionResult Error()
        {
            return View("~/Views/Shared/Error.cshtml");
        }

        [HttpGetAttribute("app/version")]
        public string Version()
        {
            return appVersion;

        }

        [HttpGetAttribute("app/name")]
        public string ProjectName()
        {
            return appName;
        }
    }
}

这是我的Index.cshtml文件(已放置在Views / Home中):

@{
    ViewBag.Title = "Tuner";
}

@section pageHead {
}

@section scripts {
    <script src="~/vendor.bundle.js"></script> 
    <script src="~/main.bundle.js"></script>

}

<cache vary-by="@Context.Request.Path">
    <app>Loading content...</app>
</cache>

7 个答案:

答案 0 :(得分:7)

您和我一样,可能需要安装ASP.NET!

在Windows Server 2012 R2上,可以通过打开或关闭Windows功能功能完成此操作:

  1. 完成向导的开始之前安装类型服务器选择步骤。
  2. 服务器角色下,找到 Web服务器(IIS)节点并展开它。
  3. 展开 Web服务器节点。
  4. 展开应用程序开发节点。
  5. 视情况检查 ASP.NET 3.5 ASP.NET 4.5 节点。
  6. 完成添加角色和功能向导

答案 1 :(得分:4)

在您的设置中,UseIISIntegration“干扰”UseUrls,因为UseUrls设置用于Kestrel进程而不是IISExpress / IIS。

如果要更改IIS端口,请查看Properties / launchSettings.json - 您可以在那里配置IIS正在使用的applicationUrl。

您可以删除UseIISIntegration用于测试目的,然后您可以连接到端口5000,但是从不应该使用Kestrel作为面向Internet的服务器,它应该始终在IIS之类的反向代理服务器后面运行Nginx等。

有关详细信息,请参阅the Hosting Docs Page

答案 2 :(得分:4)

遵循此指南后,在IIS 10.0上安装ASP.NET Core 3.1应用程序时出现以下错误:

https://docs.microsoft.com/en-us/aspnet/core/tutorials/publish-to-iis?view=aspnetcore-3.1&tabs=visual-studio

This page isn't working
localhost is currently unable to handle this request.
HTTP ERROR 500

enter image description here

如果您使用的是Windows:

启动事件查看器-> Windows日志->应用程序。

enter image description here

就我而言,我在下面遇到错误,并且可以从那里继续(允许我的应用程序池用户访问localdb)。

Microsoft.Data.SqlClient.SqlException(0x80131904):与网络相关 或建立与以下对象的连接时发生特定于实例的错误 SQL Server。服务器未找到或无法访问。校验 实例名称正确并且已将SQL Server配置为 允许远程连接。 (提供者:SQL网络接口,错误:50 -发生本地数据库运行时错误。无法创建自动实例。有关错误详细信息,请参见Windows应用程序事件日志。

答案 3 :(得分:2)

我正在使用IIS(我不清楚OP是否尝试使用IIS),但我没有安装.NET Core Windows Server Hosting捆绑包,如instructions like this one中所述。安装该模块后,我的应用程序服务(即没有500错误)

答案 4 :(得分:1)

在vs2017中运行asp.net MVC core 1.1项目也会出现此错误。
通过将所有NuGet软件包1.x版本升级到最新的2.x,并将目标框架升级到.NET Core 2.1来解决。

答案 5 :(得分:0)

请一次检查数据库。在我的情况下,我在asp样板中遇到了问题。 VS17 .net SDK版本2.2。只需更改应用程序设置文件并添加任何可用的数据库,然后尝试再次运行项目即可。

答案 6 :(得分:0)

一个可能的原因是您试图将 PageModel 作为参数传递。出于某种原因,这失败了:

System.NotSupportedException:不支持“GT.ADS.Web.Pages.Error1Model.TempData”上的集合类型“Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary”。

如果您尝试从标准 MVC 架构迁移到 Blazor 设置,这应该很常见。在我从模型中传递了我需要的东西后,错误就解决了。