0

我有一个由 Winform C# 构建的应用程序。在我的应用程序中有自托管 html 文件和 Web API 的代码,但自托管 Web API 需要管理员权限。因此,我在我的应用程序上以管理员身份运行,同时在浏览器中访问 html 页面。未加载 html 页面,我在浏览器中只收到一条错误消息。

{"Message":"No HTTP resource was found that matches the request URI 'http://192.168.100.126:44811/'."}

我不明白为什么以管理员身份运行时没有加载它

这里代码到 selfhost html 文件和 web api

void WebHost(string url) {
    try {

        WebApp.Start(url, builder = >builder.UseFileServer(enableDirectoryBrowsing: true));

        var config = new HttpSelfHostConfiguration(url);

        config.Routes.MapHttpRoute(
        name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new {
            id = RouteParameter.Optional
        });
        config.Formatters.Remove(config.Formatters.XmlFormatter);

        var server = new HttpSelfHostServer(config);
        var task = server.OpenAsync();
        task.Wait();
        Console.WriteLine("Server is up and running");

        Console.WriteLine("Listening at " + url);
    } catch(Exception w) {
        MessageBox.Show(w.ToString());
    }
}

当我的应用程序在没有管理员的情况下运行时出现图像错误消息

编辑1:

我找到了另一种自托管 Web API 的方法。正在使用 webapp.start 方法。与 selfhost 的 html 文件相同。但是当我尝试开始时。我有冲突前缀

System.Reflection.TargetInvocationException: 'Exception has been thrown by the target of an invocation.'

HttpListenerException: Failed to listen on prefix 'http://192.168.100.126:44811/' because it conflicts with an existing registration on the machine.

我按照本教程https://docs.microsoft.com/en-us/aspnet/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api

和这里的代码开始

var url = "http://192.168.100.126:44811";
            WebApp.Start(url, builder => builder.UseFileServer(enableDirectoryBrowsing: true));
            WebApp.Start<WebAPI>(url: url);

所以问题是如何以相同的方法使其自托管(webApp.Start)

编辑2:

我尝试以不同的端口和相同的方法启动 html 文件和 Web API。现在工作没有冲突。

但它可以在相同的 ip 和端口中运行而不会发生冲突吗?

因为在 Jquery 中使用 Ajax 请求 Web API 时出现 CORS 错误

4

1 回答 1

0

您可以避免每次都以管理员身份运行端点。如同

 netsh http add urlacl url=http://localhost user=Everyone

无论如何,您的错误看起来像是路由问题。所以请求到达 WebApi 但无法正确路由

于 2019-07-25T09:00:51.877 回答