Added support for the AbortRequest action

This commit is contained in:
Mikael Mengistu 2016-10-31 14:19:11 -07:00 коммит произвёл GitHub
Родитель c0425c6253
Коммит 7948a76f74
5 изменённых файлов: 53 добавлений и 2 удалений

Просмотреть файл

@ -18,6 +18,7 @@ namespace Microsoft.AspNetCore.Rewrite.Logging
private static readonly Action<ILogger, Exception> _redirectedToHttps;
private static readonly Action<ILogger, string, Exception> _redirectSummary;
private static readonly Action<ILogger, string, Exception> _rewriteSummary;
private static readonly Action<ILogger, string, Exception> _abortedRequest;
static RewriteMiddlewareLoggingExtensions()
{
@ -70,6 +71,11 @@ namespace Microsoft.AspNetCore.Rewrite.Logging
LogLevel.Information,
10,
"Request was rewritten to {rewrittenUrl}");
_abortedRequest = LoggerMessage.Define<string>(
LogLevel.Debug,
11,
"Request to {requestedUrl} was aborted");
}
public static void RewriteMiddlewareRequestContinueResults(this ILogger logger, string currentUrl)
@ -121,5 +127,10 @@ namespace Microsoft.AspNetCore.Rewrite.Logging
{
_rewriteSummary(logger, rewrittenUrl, null);
}
public static void AbortedRequest(this ILogger logger, string requestedUrl)
{
_abortedRequest(logger, requestedUrl, null);
}
}
}

Просмотреть файл

@ -52,7 +52,8 @@ namespace Microsoft.AspNetCore.Rewrite.Internal.IISUrlRewrite
_action = new RedirectAction(statusCode, url, appendQueryString);
break;
case ActionType.AbortRequest:
throw new NotImplementedException("Abort Requests are not implemented");
_action = new AbortAction();
break;
case ActionType.CustomResponse:
throw new NotImplementedException("Custom Responses are not implemented");
}

Просмотреть файл

@ -0,0 +1,17 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using Microsoft.AspNetCore.Rewrite.Logging;
namespace Microsoft.AspNetCore.Rewrite.Internal.UrlActions
{
public class AbortAction : UrlAction
{
public override void ApplyAction(RewriteContext context, MatchResults ruleMatch, MatchResults condMatch)
{
context.HttpContext.Abort();
context.Result = RuleResult.EndResponse;
context.Logger?.AbortedRequest(context.HttpContext.Request.Path + context.HttpContext.Request.QueryString);
}
}
}

Просмотреть файл

@ -21,7 +21,7 @@ namespace Microsoft.AspNetCore.Rewrite.Internal.UrlActions
bool queryStringDelete,
bool escapeBackReferences)
{
// For the replacement, we must have at least
// For the replacement, we must have at least
// one segment (cannot have an empty replacement)
Result = result;
Url = pattern;

Просмотреть файл

@ -0,0 +1,22 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Rewrite.Internal.UrlActions;
using Xunit;
namespace Microsoft.AspNetCore.Rewrite.Tests.UrlActions
{
public class AbortActionTests
{
public void AbortAction_VerifyEndResponseResult()
{
var context = new RewriteContext { HttpContext = new DefaultHttpContext() };
var action = new AbortAction();
action.ApplyAction(context, null, null);
Assert.Equal(RuleResult.EndResponse, context.Result);
}
}
}