簡體   English   中英

在IIS上部署ASP.Net核心1應用程序(404錯誤)

[英]Deploy ASP.Net core 1 app on IIS (404 error)

我正在努力讓我的網絡服務器上的IIS中運行我的ASP.Net核心1(asp.net 5 / MVC 6)應用程序。 我已按照指南操作並在服務器上完成以下操作

  • 通過get.asp.net安裝ASP.Net 5
  • 安裝HttpPlatformHandler 1.2

我已經檢查過我可以在服務器上運行dnx並且編譯的位是64位,並且應用程序池是“No Managed Code”並且運行為64位。

我可以通過運行web.cmd並導航到http:// localhost:5000 (或任何端口)在Web服務器上運行應用程序,但是當我嘗試將應用程序設置為默認網站中的應用程序並瀏覽到它時(例如, http:// localhost / MyMVC6App )我收到404錯誤。 我已檢查物理路徑是否指向/ MyMVC6App / wwwroot。 我還檢查了webserver / handlers部分是否已解鎖。

我還創建了一個vanilla ASP.Net 5 / Core 1應用程序,並在2個不同的服務器上獲得相同的404錯誤!

這是我的配置方法:

 public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();

            app.UseApplicationInsightsRequestTelemetry();

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

            app.UseIISPlatformHandler();

            app.UseApplicationInsightsExceptionTelemetry();

            app.UseStaticFiles();

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

有任何想法嗎?

解決此問題的最簡單方法是,如果您的靜態文件是在ASPNET Core應用程序之外托管,則將IIS應用程序名稱添加為MVC中路由的基礎。

另一種方法是添加一個簡單的中間件類來去除IIS應用程序名稱,並使請求看起來對它下面的任何模塊都是透明的。 我沒有測試下面的代碼但是:

using System.Threading.Tasks;
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Http;

namespace MyMVC6App
{
    // You may need to install the Microsoft.AspNet.Http.Abstractions package into your project
    public class RemoveIISAppNameMiddleware
    {
        private readonly RequestDelegate _next;

        public RemoveIISAppNameMiddleware(RequestDelegate next)
        {
            _next = next;
        }

        public Task Invoke(HttpContext httpContext)
        {
            var newRequestPath = new PathString();
            var requestPathToIgnore = new PathString("/MyMVC6App");

            if (httpContext.Request.Path.StartsWithSegments(requestPathToIgnore))
            {
                httpContext.Request.Path.StartsWithSegments(requestPathToIgnore, out newRequestPath);
                httpContext.Request.Path = newRequestPath;
            }
            return _next(httpContext);
        }
    }

    // Extension method used to add the middleware to the HTTP request pipeline.
    public static class RemoveIISAppNameMiddlewareExtensions
    {
        public static IApplicationBuilder UseRemoveIISAppName(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<RemoveIISAppNameMiddleware>();
        }
    }
}

然后在app.UseIISPlatformHandler()之后的configure方法中調用app.UseRemoveIISAppName() 在這種情況下,您不需要在MVC路由中有任何其他路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM