2016-10-20 2 views
1

Я очень новичок в ASP.NET Core и стараюсь создать свой первый веб-сайт. Я боролся с обработкой ошибок и действительно нуждался в некоторых советах.404 обработка ошибок для HTTPS?

Для обработки 404 ошибки я использовал код app.UseStatusCodePagesWithReExecute("/Home/Error/{0}"); в startup.cs

С домашнего контроллером

[HttpGet("Home/error/{errcode}")] 
    public IActionResult Error(int errCode) 
    {   
     return View("Error", errCode);    
    } 

который, кажется, успешно поймать 404,500 ошибок и отображает страницу просмотры ошибки с правильным код. Вид ошибки в /Views/Shared/Error.cshtml

Но когда я добавить перенаправление с HTTP на HTTPS, как это в startup.cs

 app.Use(async (context, next) => 
     { 
      if (context.Request.IsHttps) 
      { 
       await next(); 
      } 
      else 
      { 
       var httpsUrl = "https://" + context.Request.Host + context.Request.Path; 
       context.Response.Redirect(httpsUrl); 
      } 
     }); 

Обработка ошибок больше не будет работать и показывать Secure Connection FailedError code: SSL_ERROR_RX_RECORD_TOO_LONG в Firefox

Теперь это выглядит так.

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    { 
     loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
     loggerFactory.AddDebug(); 
      if (env.IsDevelopment()) 
     { 
      app.UseDeveloperExceptionPage(); 
      app.UseDatabaseErrorPage(); 
      app.UseBrowserLink(); 
     } 
     else 
     { 
      app.UseExceptionHandler("/Home/Error/{0}"); 
      // StatusCodePagesMiddleware to handle errors  
      app.UseStatusCodePagesWithReExecute("/Home/Error/{0}"); 
     } 
     app.UseStaticFiles(); 
     app.UseIdentity(); 

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

     app.Use(async (context, next) => 
     { 
      if (context.Request.IsHttps) 
      { 
       await next(); 
      } 
      else 
      { 
       var httpsUrl = "https://" + context.Request.Host + context.Request.Path; 
       context.Response.Redirect(httpsUrl); 
      } 
     }); 
    } 

Как я могу обработать ошибку с HTTPS в ASP.NET MVC Core1.0, пожалуйста?

Большое вам спасибо!

+0

МОЖЕТ ЛИ ВЫ ПОЗВОЛИТЬ ваши свойства confiugration? – Tinwor

+0

Вы имеете в виду это? '{ "iisSettings": { "WindowsAuthentication": ложные, "anonymousAuthentication": правда, "iisExpress": { "applicationUrl": "HTTP: // локальный: 53519 /", "sslPort": 0 } }, ' –

+0

chnage значение sslport и повторите попытку. В моей рабочей среде установлено 44300 и отлично работает – Tinwor

ответ

0

Закажите, если важны посредники. Сначала вы должны перенаправить, а затем использовать MVC:

app.Use(async (context, next) => 
{ 
    // redirect 
    ... 
}); 

app.UseMvc(routes => 
{ 
    ... 
}