I have a problem with ASP.NET Core web application running on IIS 10. I am developing a Single Page Application with AngularJS.
The index.html loads perfectly but the backend requests are failing with 404 error code on the IIS 10. From Visual Studio with IIS Express it works perfectly.
Can anyone spot how can I fix the backend requests?
Here's my Program.cs
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
And here's my Configure method from 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?}");
});
}
就我而言,问题是我的控制器抛出异常,因此框架尝试使用不可用的异常处理程序页面,因此出现 404 错误,控制器本身抛出 500 错误
For the benefit of searchers.
I was getting a 404 when Using IIS. I had followed the correct procedure for publishing ( here ) and deployment as detailed here .
It took some time to figure out, but I eventually found the answer hidden in a Rick Strahl blog post .
Basically, when making the application pool, as well as setting it to 'No Managed Code', I also needed to go into the advanced settings and set the Application Pool Identity to 'Network Service'. It was fine under ApplicationPoolIdentity on my machine, but not on a machine I deployed to.
So, for clarity, my full procedure was:
To create package:
Publish. Could have used VS's publish function, but I used CLR via the package manager. The command was:
dotnet publish -c Release -r win-x64 --self-contained
I had to use the win-x64 identifier as we have to be compatible with 64-bit Windows Server 2008.
To deploy:
iisreset
. You should only need this the first time after you've installed the dotnet core runtime.You code is working on my machine with Kestrel. A good troubleshooting step is to find out whether the problem is with your ASP.NET Core application or with your IIS Hosting configuration.
Try this from the root of your project.
dotnet restore
dotnet run
You will see something like this:
Hosting environment: Production
Content root path: C:\MyApplicationPath
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
In your browser go to the following two URLs. If they don't work, then something is wrong with your application. If they do work, something is wrong with your IIS hosting.
localhost:5000 // you will see your index.html page
localhost:5000/api // you will see your default routes output
另一个非常愚蠢但可能的变体是,由于错误的部署设置,应用程序部署在与您预期不同的文件夹中(例如:您的服务器根目录而不是子文件夹)。
Had the same issue now which brought me to this page. In case anyone is having this issue now this was what fixed it for me:
Downloaded and installed dotnet-hosting-3.1.4-win from https://dotnet.microsoft.com/download/dotnet-core/thank-you/runtime-aspnetcore-3.1.4-windows-hosting-bundle-installer
Downloaded and installed dotnet-sdk-2.2.207-win-x64 from https://dotnet.microsoft.com/download/dotnet-core/2.2
If you are using an api call make sure you class has:
[Route("api/[controller]")] [ApiController]
above where the class is instantiated.
Also make sure you have: [HttpGet()] for example above the api method you are trying to debug.
For me the issue was an ISAPI Filter called UrlScan. I had to delete it from the application, only then did it work.
I'm a noob with windows IIS deployments so this answer might seem obvious to some people.
I was missing a key file - web.config
which IIS needs in order to run your web application. I used the web.config
configurations specified here:
https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/web-config?view=aspnetcore-5.0
Specifically, the configurations for ASP.NET Core Module.
in my case, the problem was fixed by setting environment variable in the web.config
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout"
hostingModel="inprocess">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>
I had configured a root directory using .AddRazorPageOptions(rpo => rpo.RootDirectory = "/Folder")
, but I forgot and my .cshtml
files were still in the root of the project instead. I just had to make the /Folder
folder and put my files in there and it worked.
I was missing a handler mapping for AspNetCoreModuleV2.
Request Path: * Module: AspNetCoreModuleV2 Executable: blank Name: aspNetCore (this I believe can be anything you want)
Under Request Restrictions, I unchecked the "Invoke handler only if request is mapped to:" checkbox. Selected All verbs, and Script access.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.