Mat*_*abo 19 c# asp.net iis asp.net-core asp.net-core-1.0
我在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();
}
Run Code Online (Sandbox Code Playgroud)
这是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?}");
});
}
Run Code Online (Sandbox Code Playgroud)
moh*_*has 21
在我的情况下问题是我的控制器抛出异常,因此框架试图使用异常处理程序页面,这是不可用的,因此404错误,控制器本身抛出500错误
Sha*_*tin 13
您的代码正在使用Kestrel在我的机器上运行.一个很好的故障排除步骤是找出问题是与您的ASP.NET核心应用程序或IIS主机配置有关.
从项目的根目录中尝试这个.
dotnet restore
dotnet run
Run Code Online (Sandbox Code Playgroud)
你会看到这样的东西:
Hosting environment: Production
Content root path: C:\MyApplicationPath
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
Run Code Online (Sandbox Code Playgroud)
在浏览器中,转到以下两个URL.如果它们不起作用,那么您的应用程序就会出现问题.如果它们确实有效,那么IIS主机就会出现问题.
localhost:5000 // you will see your index.html page
localhost:5000/api // you will see your default routes output
Run Code Online (Sandbox Code Playgroud)
为了搜索者的利益。
使用IIS时出现404错误。我曾跟随用于发布(正确的程序在这里,详细)和部署在这里。
花了一些时间才弄清楚,但最终我发现了隐藏在Rick Strahl博客文章中的答案。
基本上,在制作应用程序池并将其设置为“无托管代码”时,我还需要进入高级设置并将应用程序池标识设置为“网络服务”。在我的机器上的ApplicationPoolIdentity下很好,但是在我部署到的机器上却没有。
因此,为清楚起见,我的整个过程是:
创建包:
发布。可以使用VS的发布功能,但是我通过软件包管理器使用了CLR。命令是:
dotnet发布-c发布-r win-x64-自包含
我必须使用win-x64标识符,因为我们必须与64位Windows Server 2008兼容。
部署:
iisreset。在安装dotnet core运行时之后,仅应在第一次时使用。小智 7
就我而言,通过在 web.config 中设置环境变量解决了问题
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout"
hostingModel="inprocess">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>
Run Code Online (Sandbox Code Playgroud)
我缺少一个密钥文件 - web.configIIS 需要该文件才能运行您的 Web 应用程序。我使用了web.config此处指定的配置:
https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/web-config?view=aspnetcore-5.0
具体来说,是 ASP.NET Core 模块的配置。
| 归档时间: |
|
| 查看次数: |
33295 次 |
| 最近记录: |