为什么HttpRequestMessage如此有限?

Chr*_*ris 1 asp.net-web-api

我正在开发我的第一个ASP.NET Web API项目,并且我有一个自定义授权属性.我想要做的是设置属性,以便如果请求是本地的(即调试),则绕过授权检查.

在所有其他ASP.NET MVC版本中,我可以检查Request.IsLocal(甚至是Request.UserHostAddress)以查看请求是否来自本地计算机,但System.Web.Http.AuthorizeAttribute只公开HttpRequestMessage对象,这显然是没有这些信息,似乎也从Request对象中遗漏了一些其他东西.

与Web API一起使用的全新(显然有限)类的处理是什么,也许更直接地说,如何在Authorize属性中获取被调用者的主机地址?

Mar*_*nes 5

有几个不同的例子可以在这里这里获取您想要的请求信息,例如

public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        var context = actionContext.Request.Properties["MS_HttpContext"] as System.Web.HttpContextBase;
        bool isLocal = context.Request.IsLocal;
Run Code Online (Sandbox Code Playgroud)

如果这真的只是用于debuging那么使用这样的条件语句可能更安全围绕任何调试代码 - 特别是在安全上下文中...

#if DEBUG 
// 
#endif 
Run Code Online (Sandbox Code Playgroud)

至于为什么...我想这至少部分是为了允许更容易的单元测试和模拟,HTTP Context是一个ASP.NET System.Web构造...... WebApi被设计为能够作为自托管代码运行独立于ASP.NET.