Подтвердить что ты не робот

HttpActionContext.Request не имеет CreateResponse Meth

Я пытаюсь создать пользовательский атрибут AuthorizeAttribute в ASP.Net Web API для обработки Basic Auth. При переопределении HandleUnauthorizedRequest я обнаружил, что HttpActionContext.Request не имеет метода CreateResponse.

Проект представляет собой MVC 4 target.net 4.5. Я обновил веб-API до версии 2 с помощью nuget.


using System;
using System.Net.Http.Headers;
using System.Text;
using System.Threading;
using System.Web.Http;

namespace BasicAuth.Security
{
    public class BasicAuthAttribute : AuthorizeAttribute
    {
        public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
        {
            if (Thread.CurrentPrincipal.Identity.IsAuthenticated)
            {
                return;
            }

            var authHeader = actionContext.Request.Headers.Authorization;
            if (authHeader != null)
            {
                if (authHeader.Scheme.Equals("basic", StringComparison.OrdinalIgnoreCase) && !string.IsNullOrWhiteSpace(authHeader.Parameter))
                {
                    var credentials = GetCredentials(authHeader);

                    //Handle authentication

                    return;
                }
            }

          HandleUnauthorizedRequest(actionContext);
        }

        private string[] GetCredentials(AuthenticationHeaderValue authHeader)
        {
            var raw = authHeader.Parameter;
            var encoding = Encoding.ASCII;
            var credentials = encoding.GetString(Convert.FromBase64String(raw));

            return credentials.Split(':');
        }

        protected override void HandleUnauthorizedRequest(System.Web.Http.Controllers.HttpActionContext actionContext)
        {
            actionContext.Response = actionContext.Request. //No CreateResponse Method ?
        }
    }
}

Я уверен, что это должно быть недостающая или некорректная ссылка, но это довольно запутанно. Любая помощь будет высоко оценена.

Спасибо

4b9b3361

Ответ 1

CreateResponse - это метод расширения, определенный в пространстве имен System.Net.Http. Поэтому убедитесь, что вы внесли его в область видимости, добавив правильную директиву using:

using System.Net.Http;

Ответ 2

Копилка на этом посту

В проекте после некоторого слияния и обновления до последнего .net 4.6 у нас была связанная ошибка, и это было одним из первых найденных сообщений.

Симптом: "Нет перегрузки для метода" Request.CreateResponse() "принимает 0 аргументов".

Проблема: System.Net.Http.Formating отсутствует в ссылках, вызывающих ошибку

Решение. Request.CreateResponse() относится к HttpRequestMessageExtensions, живущим в пакете nuget Microsoft.AspNet.WebApi.Client, восстанавливает пакеты nuget, и если это не помогает удалить WebApi.Client(и зависимости) из проекта, добавьте его обратно и ссылка на System.Net.Http.Formating будет добавлена ​​снова.

(альтернативное решение: добавьте ссылку > browse > перейдите в папку "[папка с решением]\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45" и выберите "System.Net.Http.Formatting.dll"