为啥我在尝试使用 HttpListener 时会收到“AccessDenied”? [复制]

Posted

技术标签:

【中文标题】为啥我在尝试使用 HttpListener 时会收到“AccessDenied”? [复制]【英文标题】:Why do I get "AccessDenied" when trying to use HttpListener? [duplicate]为什么我在尝试使用 HttpListener 时会收到“AccessDenied”? [复制] 【发布时间】:2010-12-31 13:25:28 【问题描述】:

Win 7 和 VS2010 B2。我正在尝试使用内置的HttpListener 编写一个最小的 Web 服务器。但是,我不断收到 AccessDenied 异常。代码如下:

    int Run(string[] args) 

        _server = new HttpListener();
        _server.Prefixes.Add("http://*:9669/");
        _server.Start();

        Console.WriteLine("Server bound to: 0", _server.Prefixes.First());

        _server.BeginGetContext(HandleContext, null);
    

如果我绑定到系统端口,我可以理解需要以管理员身份运行,但我不明白为什么绑定到 9669 需要特殊权限。

有什么想法吗?

【问题讨论】:

【参考方案1】:

感谢这个 SO 问题:Can I listen on a port (using HttpListener or other .NET code) on Vista without requiring administrator priveleges?

我有一个答案。

netsh http 添加 urlacl url=http://*:9669/ user=fak listen=yes

疯了。这是我修改后的函数:

    int Run(string[] args) 

        var prefix = "http://*:9669/";
        var username = Environment.GetEnvironmentVariable("USERNAME");
        var userdomain = Environment.GetEnvironmentVariable("USERDOMAIN");

        _server = new HttpListener();
        _server.Prefixes.Add(prefix);

        try 
            _server.Start();
        
        catch (HttpListenerException ex) 
            if (ex.ErrorCode == 5) 
                Console.WriteLine("You need to run the following command:");
                Console.WriteLine("  netsh http add urlacl url=0 user=1\\2 listen=yes",
                    prefix, userdomain, username);
                return -1;
            
            else 
                throw;
            
        


        Console.WriteLine("Server bound to: 0", _server.Prefixes.First());

        _server.BeginGetContext(HandleContext, null);
    

【讨论】:

更多安全性供我们大家学习 看来您确实需要listen=yes。没有它为我工作。另外,我使用了http://+:9669/

以上是关于为啥我在尝试使用 HttpListener 时会收到“AccessDenied”? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在尝试使用 reddit API 时会收到 405 错误?

为啥我在尝试将它与目标 c 一起使用时会收到错误消息,即我的 json 末尾有垃圾?

为啥我在尝试访问 spark master webUI 时会重置连接?

为啥我在尝试编辑离开语音频道的用户时会收到 DiscordAPIError?

为啥我在尝试快速传递 segue 上的变量时会收到这些错误?

为啥我在使用 img 标签时会收到 403 禁止?