"Метод не найден: 'System.Net.Http.HttpRequestMessage System.Web.Http.Controllers.HttpActionContext.get_Request ()' - PullRequest
0 голосов
/ 26 апреля 2019

Я написал простой пользовательский атрибут Authorize, который применяется к нескольким методам WebAPI. Когда я запускаю на своем локальном хосте, все работает как положено, но когда я перемещаю двоичные файлы на настоящий веб-сервер, я получаю следующее сообщение об ошибке:

"Метод не найден: 'System.Net.Http.HttpRequestMessage System.Web.Http.Controllers.HttpActionContext.get_Request ()

Если я удаляю свой собственный атрибут Authorize, все отлично работает на обоих серверах.

Полная трассировка стека:

{"Message": "Произошла ошибка.", "ExceptionMessage": "Метод не найден: 'System.Net.Http.HttpRequestMessage System.Web.Http.Controllers.HttpActionContext.get_Request ()'.", «ExceptionType»: «System.MissingMethodException», «StackTrace»: «at MyApp.CustomAuthorizeAttribute.OnAuthorization (HttpActionContext actionContext) в System.Web.Http.Filters.AuthorizationFilterAttribute.OnAuthorizationAsync (HttpActionContext actionContext, CancellationToken cancellationToken) --- Конец стека трассировки от предыдущего места, где было сгенерировано исключение --- в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) в System.Web.Http.Filters.AuthorizationFilterAttribute.d__3.MoveNext () --- Конец стека трассировки от предыдущего места, где было сгенерировано исключение --- в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) at System.Web.Http.Dispatcher.HttpControllerDispatcher.d__15.MoveNext () "}

Пользовательский атрибут (урезанный, но поведение такое же):

 public class CustomAuthorizeAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(HttpActionContext actionContext)
    {
        try
        {
            var authValue = actionContext.Request.Headers.Authorization;
            return;
        }
}
}

Проблема, похоже, связана с тем, что свойство HttpActionContext Request. Если я пытаюсь получить значение из этого свойства, он выдает ошибку выше. Если я укажу на эту строку, она работает нормально.

Есть идеи?

* Дополнительная информация * Я могу удалить весь код из метода OnAuthorization и просто вернуться, и он выдаст ту же ошибку.

* Подробнее * Ошибка происходит, когда я пытаюсь получить доступ к методу Request HttpActionContext.

1 Ответ

0 голосов
/ 26 апреля 2019

Это исключение, потому что в некоторых случаях ваш actionContext равен нулю.

Изменить на

var authValue = actionContext != null ? actionContext.Request.Headers.Authorization : null;
...