18

我的应用程序使用 Nancy Selfhosting。当我在没有管理员权限的情况下启动它时,我得到一个 System.Net.HttpListenerException“拒绝访问”。

这是代码:

static void Main(string[] args)
    {   
        var nancyHost = new Nancy.Hosting.Self.NancyHost(new Uri("http://localhost:80/"));
        nancyHost.Start();
        Application.Run();
    }

我也尝试了不同的端口但没有成功。奇怪的是,在启动监听相同 URL 的 HttpListener 时,我没有收到任何异常。什么可能导致此异常?

4

3 回答 3

47

您需要将自主机配置设置为不通过RewriteLocalhostproperty重写 localhost 路由。

namespace NancyApplication1
{
    using System;
    using Nancy.Hosting.Self;

    class Program
    {
        static void Main(string[] args)
        {
            var uri = new Uri("http://localhost:3579");
            var config = new HostConfiguration();

            // (Change the default RewriteLocalhost value)
            config.RewriteLocalhost = false;

            using (var host = new NancyHost(config, uri))
            {
                host.Start();

                Console.WriteLine("Your application is running on " + uri);
                Console.WriteLine("Press any [Enter] to close the host.");
                Console.ReadLine();
            }
        }
    }
}

我通过尝试和失败发现了这一点,但这个页面解释了背后的原因。

于 2013-08-26T06:44:14.957 回答
4

或者 - 从文档中:

请注意,在 Windows 主机上,可能会抛出 HttpListenerException 并带有拒绝访问消息。要解决此问题,必须将 URL 添加到 ACL。此外,可能需要在机器或公司防火墙上打开该端口以允许访问该服务。

通过运行以下命令添加到 ACL:

netsh http add urlacl url=http://+:8080/ user=DOMAIN\username

如果您需要从 ACL 中删除:

netsh http delete urlacl url=http://+:8080/
于 2016-06-23T15:09:24.277 回答
0

您可以使用 Kestrel 托管 Nancy。这真的很简单:

public void Main(string[] args)
{
    var owinHost = new WebHostBuilder()
        .UseStartup<Startup>()
        .UseUrls("http://+:12345/")
        .Build();

    owinHost.Run();
}

public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.UseOwin(x => x.UseNancy());
    }
}

唯一的困难是准备所需的所有 dll(30+)。我们绝对应该使用 NuGet 来解决所有依赖关系。

于 2017-04-06T04:23:40.460 回答