2016-04-06 34 views
-1

我收到以下異常:MVC 6 - Krestel拋出錯誤,而建設Request的,任何工作四處呼叫路由到控制器

System.ArgumentException 

    at Microsoft.AspNet.Http.PathString..ctor(String value) 
    at Microsoft.AspNet.Http.Internal.DefaultHttpRequest.get_Path() 
    at Microsoft.AspNet.StaticFiles.Helpers.TryMatchPath(HttpContext context, PathString matchUrl, Boolean forDirectory, PathString& subpath) 

the Request METHOD is GET 
HTTP Version HTTP/1.1 
Content-Type : application/x-www-form-urlencoded 
Accept-Encoding : {gzip} 

任何幫助,將不勝感激。

public Startup(IHostingEnvironment env) 
{ 
    // Set up configuration sources. 
    var builder = new ConfigurationBuilder() 
     .AddJsonFile("appsettings.json") 
     .AddJsonFile("XDCRInfo.json") 
     .AddEnvironmentVariables(); 
    Configuration = builder.Build(); 
} 

public void ConfigureServices(IServiceCollection services) 
{ 
    var policy = new Microsoft.AspNet.Cors.Infrastructure.CorsPolicy(); 

    policy.Headers.Add("*"); 
    policy.Methods.Add("*"); 
    policy.Origins.Add("*"); 
    policy.SupportsCredentials = true; 

    services.Configure<XDCRSettings>(Configuration.GetSection("XDCRSettings")); 

    // Adding Cors 
    services.AddCors(options => 
    { 
     options.AddPolicy("CrossOrigin", policy); 
    }); 

    // Add framework services. 
    services.AddMvc();    

    services.Configure<MvcOptions>(options => 
    { 
     options.RespectBrowserAcceptHeader = true; 
    }); 
} 

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    app.UseExceptionHandler("/Home/Error"); 

    app.Use(next => async context => 
     // Keep the original stream in a separate 
     // variable to restore it later if necessary. 
     var stream = context.Request.Body; 

     // Optimization: don't buffer the request if 
     // there was no stream or if it is rewindable. 
     if (stream == Stream.Null || stream.CanSeek) 
     { 
      await next(context); 
      return; 
     } 

     try 
     { 
      using (var buffer = new MemoryStream()) 
      { 
       // Copy the request stream to the memory stream. 
       await stream.CopyToAsync(buffer); 

       // Rewind the memory stream. 
       buffer.Position = 0L; 

       // Replace the request stream by the memory stream. 
       context.Request.Body = buffer; 

       // Invoke the rest of the pipeline. 
       await next(context); 
      } 
     } 
     catch (System.ArgumentException ex) 
     { 
      var Frame = (Microsoft.AspNet.Server.Kestrel.Http.Frame)context.Features; 

      Console.WriteLine(Frame.RequestUri); 
     } 
     finally 
     { 
      // Restore the original stream. 
      context.Request.Body = stream; 
      Console.WriteLine(context.Request); 
     } 
    }); 

    app.UseCors("CrossOrigin"); 

    app.UseMvc(); 
} 

App.use被用於捕獲錯誤。否則,我無法看到請求。

+0

至少讓我們看看你的代碼。 – SubliemeSiem

+0

public startup(IHostingEnvironment env) { //設置配置源。 var builder = new ConfigurationBuilder() .AddJsonFile(「appsettings.json」) .AddJsonFile(「XDCRInfo.json」) .AddEnvironmentVariables(); Configuration = builder.Build(); } –

回答

0

我已經想通了。如果AbsoluteURL在路徑中,紅隼將會中斷。爲了使其工作,這是周圍的工作

 app.Use(next => async context => { 

        // get the frame from kestrel and then but the path by removing the hostname 
        var Frame = (Microsoft.AspNet.Server.Kestrel.Http.Frame)context.Features; 

        var newpath = Frame.RequestUri.Replace("http://" + context.Request.Host.Value, ""); 
        context.Request.Path = newpath; 

        // Invoke the rest of the pipeline. 
        await next(context); 

     });