我编写了一个简单的自定义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方法时发生错误。
答案 0 :(得分:0)
抛出该异常是因为在某些情况下,您的actionContext
为空。
更改为
var authValue = actionContext != null ? actionContext.Request.Headers.Authorization : null;