示例#1
0
 public static void UsePageNotFound(this IApplicationBuilder application, string notFoundUrl = "/Error/PageNotFound")
 {
     application.UseStatusCodePages(async context =>
     {
         if (context.HttpContext.Response.StatusCode != 404 ||
             (HttpRequestExtensions.IsAjaxRequest(context.HttpContext.Request)
       ? 1
       : (HttpRequestExtensions.IsApiRequest(context.HttpContext.Request) ? 1 : 0)) != 0 ||
             context.HttpContext.Request.IsStaticContentRequest())
         {
             return;
         }
         var originalPath        = context.HttpContext.Request.Path;
         var originalQueryString = context.HttpContext.Request.QueryString;
         context.HttpContext.Features.Set((IStatusCodeReExecuteFeature) new StatusCodeReExecuteFeature()
         {
             OriginalPathBase    = context.HttpContext.Request.PathBase.Value,
             OriginalPath        = originalPath.Value,
             OriginalQueryString = (originalQueryString.HasValue ? originalQueryString.Value : (string)null)
         });
         context.HttpContext.Request.Path        = (PathString)notFoundUrl;
         context.HttpContext.Request.QueryString = QueryString.Empty;
         try
         {
             await context.Next(context.HttpContext).ConfigureAwait(false);
         }
         finally
         {
             context.HttpContext.Request.QueryString = originalQueryString;
             context.HttpContext.Request.Path        = originalPath;
             context.HttpContext.Features.Set((IStatusCodeReExecuteFeature)null);
         }
     });
 }
示例#2
0
 public static bool IsApiRequest(HttpRequest request)
 {
     if (request == null)
     {
         throw new ArgumentNullException(nameof(request));
     }
     return(HttpRequestExtensions.IsApiRequest(request.Path));
 }