我在IIS 10上运行的ASP.NET Core Web应用程序出了问题。 我正在使用AngularJS开发单页应用程序。
index.html完全加载,但IIS 10上的后端请求失败并显示404错误代码。从带有IIS Express的Visual Studio中,它完美运行。
有人能发现我如何解决后端请求?
这是我的Program.cs
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
这是我在Startup.cs中的配置方法
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseIdentity();
// Custom middleware for Angular UI-Router
app.Use(async (context, next) =>
{
if (!Path.HasExtension(context.Request.Path.Value)
&& context.Request.HttpContext.Request.Headers["X-Requested-With"] != "XMLHttpRequest"
&& context.Request.Method.ToUpper() != "POST"
&& context.Request.Method.ToUpper() != "PUT"
&& context.Request.Method.ToUpper() != "DELETE")
{
await context.Response.WriteAsync(File.ReadAllText(env.WebRootPath + "/index.html"));
}
await next();
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "api/{controller=Home}/{action=Index}/{id?}");
});
}
答案 0 :(得分:19)
在我的情况下问题是我的控制器抛出异常,因此框架试图使用不可用的异常处理程序页面,因此404错误,控制器本身抛出500错误
答案 1 :(得分:10)
您的代码正在使用Kestrel在我的机器上运行。一个很好的故障排除步骤是找出问题是与您的ASP.NET核心应用程序或IIS主机配置有关。
从项目的根目录中尝试此操作。
dotnet restore
dotnet run
你会看到这样的事情:
Hosting environment: Production
Content root path: C:\MyApplicationPath
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
在浏览器中,转到以下两个网址。如果他们不能工作,那么您的申请就会出现问题。如果它们确实有效,那么IIS主机就会出现问题。
localhost:5000 // you will see your index.html page
localhost:5000/api // you will see your default routes output
答案 2 :(得分:1)
现在遇到了同样的问题,这使我进入了此页面。如果有人现在遇到这个问题,这就是为我解决的问题:
从https://dotnet.microsoft.com/download/dotnet-core/2.2下载了并安装了dotnet-sdk-2.2.207-win-x64
答案 3 :(得分:1)
我是 Windows IIS 部署的菜鸟,所以这个答案对某些人来说似乎很明显。
我丢失了一个密钥文件 - web.config
,IIS 需要它来运行您的 Web 应用程序。我使用了此处指定的 web.config
配置:
https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/web-config?view=aspnetcore-5.0
特别是 ASP.NET Core 模块的配置。
答案 4 :(得分:0)
另一个非常愚蠢但可能的变体是,由于错误的部署设置,该应用程序部署在与您期望的文件夹不同的文件夹中(例如:您的服务器根目录而不是子文件夹)。
答案 5 :(得分:0)
如果您使用的是api调用,请确保您的课程具有:
[Route(“ api / [controller]”)] [ApiController]
实例化类的上方。
还要确保您具有: [HttpGet()] 例如在您要调试的api方法上方。
答案 6 :(得分:0)
对我来说,问题是一个称为UrlScan的ISAPI筛选器。我必须将其从应用程序中删除,然后才起作用。