“找不到方法:'System.Net.Http.HttpRequestMessage System.Web.Http.Controllers.HttpActionContext.get_Request()'

时间:2019-04-25 22:13:16

标签: c# asp.net-mvc custom-attributes

我编写了一个简单的自定义Authorize属性,该属性应用于多个WebAPI方法。当我在本地主机上运行时,一切正常,但是当我将二进制文件移至真正的Web服务器时,我开始收到以下错误消息:

  

“未找到方法:'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()'。”, MyApp.CustomAuthorizeAttribute.OnAuthorization(HttpActionContext actionContext)上的“ ExceptionType”:“ System.MissingMethodException”,“ StackTrace”:“”    在System.Web.Http.Filters.AuthorizationFilterAttribute.OnAuthorizationAsync(HttpActionContext actionContext,CancellationToken cancelledToken)   ---从之前引发异常的位置开始的堆栈结束跟踪---   在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(任务任务)   在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方法中删除所有代码,然后简单地返回,它将引发相同的错误。

*更多* 当我尝试访问HttpActionContext的Request方法时发生错误。

1 个答案:

答案 0 :(得分:0)

抛出该异常是因为在某些情况下,您的actionContext为空。

更改为

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