HttpActionContext.Request没有CreateResponse Meth

时间:2014-02-19 21:37:27

标签: c# asp.net-mvc asp.net-web-api

我正在尝试在ASP.Net Web API中创建自定义AuthorizeAttribute来处理Basic Auth。当重写HandleUnauthorizedRequest时,我发现HttpActionContext.Request没有CreateResponse方法。

该项目是MVC 4目标.net 4.5。我使用nuget将Web API更新到版本2。


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 ?
        }
    }
}

我确信它必须是某个地方缺少或不正确的引用,但它相当令人困惑。任何帮助将不胜感激。

由于

2 个答案:

答案 0 :(得分:48)

CreateResponseSystem.Net.Http命名空间中定义的扩展方法。因此,请确保通过添加正确的using指令将其纳入范围:

using System.Net.Http;

答案 1 :(得分:3)

这篇文章的小猪支持

在一个项目经过一些合并并升级到最新的.net 4.6之后,我们遇到了一个相关的错误,这是最先找到的帖子之一。

症状:"方法没有超载' Request.CreateResponse()'取0个参数"。

问题:导致错误的引用中缺少System.Net.Http.Formating

解决方案:Request.CreateResponse()属于生活在nuget包Microsoft.AspNet.WebApi.Client中的HttpRequestMessageExtensions,恢复nuget包,如果这样做无助于从项目中删除WebApi.Client(和依赖项),请将其添加回并将再次添加对System.Net.Http.Formating的引用。

(替代解决方案:添加参考>浏览>转到" [解决方案文件夹] packages \ Microsoft.AspNet.WebApi.Client.5.2.3 \ lib \ net45"并选择" System.Net.Http.Formatting.dll"