【问题标题】:How to get HttpContext in servicestack.net如何在 servicestack.net 中获取 HttpContext
【发布时间】:2015-12-15 19:18:23
【问题描述】:

我无法切换到所有服务堆栈的新提供者、身份验证等。所以,我正在运行一个混合场景,效果很好。

为了让当前用户投入使用,我这样做:

    private IPrincipal CurrentUser()
    {
        var context = HttpContext.Current;
        if (context != null)
        {
            var user = context.User;
            if (user != null)
            {
                if (!user.Identity.IsAuthenticated)
                    return null;
                return user;
            }
        }
        return null;
    }

是否有替代/更好的方法可以直接从服务获取当前的 http 上下文?如果不必,我宁愿不必使用 HttpContext.Current?

【问题讨论】:

    标签: servicestack


    【解决方案1】:

    这是另一种方式...它通过 ServiceStack 获取 OriginalRequest,这将是一个 ASP.NET 请求(尽管如果不在 ASP.NET 应用程序中使用,它可能是 HttpListener HttpRequest)。不确定它是否更好,但您的服务代码中不再有 HttpContext.Current 。

    public class MyService : Service
    {
        public object Get(MyRequest request)
        {
            var originalRequest = this.Request.OriginalRequest as System.Web.HttpRequest;
            var user = originalRequest.RequestContext.HttpContext.User;               
            // more code...      
        }
    }
    

    【讨论】:

    • 因为 System.Web.HttpRequestWrapper 是我需要的
    • 可能类似于 var httpWrapper = new HttpRequestWrapper(orignalRequest); .我不认为任何 HttpRequestWrapper 实例都可以在 Service 的实例中使用......不过,这可能是错误的。
    • 这可能也有效。简单地这样做对我有用: var orignalRequest = this.Request.OriginalRequest as System.Web.HttpRequestWrapper
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多