问题标签 [self-host-webapi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
60 浏览

asp.net-mvc - .Net Framework Web Api SelfHost 服务突然停止

  • 我创建了一个简单的 Web Api selfHost 作为 Windows 服务,它侦听从数据库动态加载的地址,通常它包括端口号(例如:http://localhost:1900)当我更改地址时(例如端口号,像 http://localhost:1901 之类的服务可以捕获新端口上的请求,但旧端口( http:localhost:1900 )上的请求会导致服务崩溃并且它将被停止。我只能调试我的服务,只看到 NullReference 错误,而没有更多关于它的信息。我什至不知道这个错误发生在哪里,而且我的日志都不能帮助我。你怎么看这个错误?你以前见过这种错误吗?

  • 有关更多信息,我应该说我可以在事件查看器窗口中看到的一些错误:

  • 应用程序:{Service.exe} 框架版本:v4.0.30319 描述:进程因未处理的异常而终止。异常信息:System.Web.Http.SelfHost.HttpSelfHostServer+d__35.MoveNext() 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task) 在 System.Runtime.CompilerServices.TaskAwaiter 的 System.NullReferenceException。 HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task) 在 System.Web.Http.SelfHost.HttpSelfHostServer+d__34.MoveNext() 在 System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.b__6_1(System.Object) 在 System.Threading.QueueUserWorkItemCallback .WaitCallback_Context(System.Object) 在 System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 在 System.Threading。

  • 错误应用程序名称:{Service.exe},版本:1.0.0.0,时间戳:0xc594704b 错误模块名称:KERNELBASE.dll,版本:10.0.14393.3383,时间戳:0x5ddcb9ff 异常代码:0xe0434352 错误偏移:0x000dc232 错误进程 id: 0x7370 错误应用程序启动时间:0x01d72886545b1d41 错误应用程序路径:{Service PhysicalAddress} 错误模块路径:C:\Windows\System32\KERNELBASE.dll 报告 ID:305c75f4-8c83-484a-b673-565abfc2b7d6 错误包全名:错误包相对应用程序编号

  • 有关更多详细信息,我将我的服务类正文带到下面:

0 投票
0 回答
103 浏览

c# - HTTP Post 请求失败并在 OWIN 自主机 Web api 服务器中出现内部服务器错误

我在 OWIN 自主机上设置了一些简单的 API。在我的本地机器上启动服务器时,一切都按预期工作,但是当我在生产中部署相同的 API 时,POST API 开始失败,而 GET 工作正常。

来自服务器的堆栈跟踪只有:

'System.Net.WebException:远程服务器返回错误:(500)内部服务器错误。在 System.Net.HttpWebRequest.GetResponse()

尝试了多种方法,但没有任何效果。我该如何进一步调试呢?

0 投票
0 回答
22 浏览

c# - HttpSelfHostServer 设置多个前缀

我正在将 C# 控制台应用程序转换为自托管 Web 应用程序。

控制台应用程序使用带有两个前缀的 HttpListener:

我正在使用 HttpSelfHostServer 进行转换:

有没有办法在 HttpSelfHostServer 上设置多个前缀?我应该克隆 HttpSelfHostConfiguration,修改其基地址并创建另一个 HttpSelfHostServer 实例吗?可能有效,但这样做似乎是错误的。

0 投票
0 回答
13 浏览

rest - 从 System.Web.Http.ApiController 实例外部获取数据

请原谅愚蠢的标题。我对 webdev、REST 或 ASP.Net 几乎一无所知,所以我不知道最能描述我正在尝试做什么的术语。

我创建了一个 OWIN-Selfhost 服务,该服务应该作为 winfoms 应用程序的一部分运行。我创建了一个 ApiController 并通过 PostMan 调用它。有用。该方法被调用。

  • 表单拥有 WebApp 的一个实例。
  • 表单拥有所请求的数据。

如何访问根据请求创建的 ResultsController 实例中的数据?我应该把东西做成静态的还是单例的?对我来说听起来不对。

感谢您抽出宝贵的时间!

0 投票
3 回答
923 浏览

asp.net-core - Remove Microsoft-HTTPAPI/2.0 from the response header Server (Self-hosted Http.Sys)

How do i suppress or remove the HTTP response header 'Server: Microsoft-HTTPAPI/2.0'? Penetration testing has revealed that it is a security vulnerability to disclose the server platform.

I have a self-hosted asp.net core web application running on Windows Server 2019 and am using Http.Sys instead of Kestrel since I need NTML authentication.

According to Microsoft, the response header can be turned off via the registry, but it does not work for me. I have set the DisableServerHeader to 2 in the registry per HTTP.SYS registry settings and rebooted the server.

  1. If I do not add a response header, it will be added automatically. Server: Microsoft-HTTPAPI/2.0
  2. If I add a response header, the value will be added automatically. Server: my-dumy-value Microsoft-HTTPAPI/2.0

Update, I found the issue! I failed to enter the parameter name correctly, a traling space was revealed when I exported the key. It works as expected after removing the space and rebooting the server.

0 投票
0 回答
79 浏览

c# - AddressAccessDeniedException:HTTP 无法注册 URL http://+:8080/api/ - 如何:从 .NET 进程以编程方式“netsh http 添加 urlacl”?

我正在使用 .NET Framework 4.6.1、C# 和 WinForms(离线桌面应用程序)开发一个项目。我来自 web-dev,我对桌面应用程序不是很熟悉。

对于应用程序的一部分,我正在使用HttpSelfHostServer为我提供 API 功能。

这会引发错误:AddressAccessDeniedException: HTTP could not register URL http://+:8080/api/. Your process does not have access rights to this namespace

我努力了:

  1. 以管理员身份使用netsh http add urlacl url=http://+:8080/api/ user=everyone来自 CMD 的命令来解决问题,但这是一个糟糕的解决方案。应用程序的最终用户不必使用命令行。

  2. 以编程方式运行上述命令:

根据我发现的类似问题,这应该以管理员权限执行命令,但在我的情况下,它所做的只是:打开 Windows 用户访问控制以确认,然后打开命令提示符窗口,没有传入任何命令(导致抛出相同的AddressAccessDeniedException)。

我错过了什么?

我知道这一切看起来像是一种“hacky”的做事方式,但由于各种原因,我在这方面没有太多选择,我只需要以一种或另一种方式完成这项工作,而不要求最终用户做事.

我会提出任何建议。

非常感谢。

0 投票
0 回答
48 浏览

c# - 用于 Web Api 调用 HttpSelfHostServer 的 Console.ReadKey 块

我有一个控制台应用程序,它(除其他外)使用 HttpSelfHostServer 托管一个 Web api 控制器。应用程序启动一个前台线程做一些事情,并等待用户按键,然后应用程序将退出。这很好用。我使用 Console.ReadKey 等待输入。

当我添加一个 HttpSelfHostServer 和一个 Web Api 控制器时,会发生奇怪的事情。每次在控制器中接收到一个 http 请求时,都会使用一个新线程。我猜它会从 Threadpool 中获取一个线程。在这个线程中,我做了一个 Console.WriteLine()。这在大多数情况下都有效,直到突然停止工作。处理在 Console.WriteLine 中被阻止。是不是碰巧得到了在 Console.ReadKey 上等待的线程?

总而言之,我的应用程序做了三件事:

  1. 一个线程正在等待用户按键然后停止应用程序
  2. 一个线程正在做其他处理工作。
  3. Web Api 控制器为每个 Web 请求启动一个新线程,进行一些处理,包括一个 console.writeline。此处理相当快,并且返回 HttpStatusCode.OK 很快。除非 console.writeline 挂起。然后它永远不会返回,并且任何更多的 Web Api 调用块也在这里。直到按下一个键。然后突然所有这些阻塞的线程都被释放了。

怎么了?怎么解决?

请参阅下面的基本实现。

0 投票
1 回答
46 浏览

c# - 自托管服务器和基于 TLS 的 SSL 通信

我有一个在 Windows 服务上托管 WebAPI (HttpSelfHostServer) 的应用程序。通过 SSL 进行通信(本地主机的自签名证书)。现在我有两种情况:

  1. Windows7 - 调用 API 方法时(例如从浏览器),我看到使用了 TLS 1.0
  2. Windows10 - 相同的调用,但这里我们有 TLS1.2

在这两种情况下,它都是同一个应用程序。此外,我在服务的入口点设置了以下属性

当我在 Win7 上打开 IE 上的任何页面时,我可以看到 TLS1.2 没问题。我必须做什么才能在 Win7 上的 WebAPI 中强制通过 TLS1.2 进行通信?

有任何想法吗?

0 投票
0 回答
113 浏览

c# - 在自托管服务器上具有相互 TLS 身份验证的 ASP NET Web API

我正在尝试在自托管 Web 服务器上实施客户端认证验证。我的第一次尝试是检查请求是否包含客户端证书,但我被困在这里,因为Request.GetClientCertificate()总是返回null.

这是我的身份验证属性类。

我使用 Postman 作为 REST 客户端,使用 Postman 我发送客户端证书,如此处记录的使用证书。在 Postman 控制台中,我可以看到证书已成功发送。

我按照本教程使用 nodejs 创建了另一台服务器,以确保我的证书正常并且 Postman 客户端也正常。该服务器工作正常,我可以成功授权 Postman 客户端。

因此,我认为问题仅与 C# 自托管服务器有关。

不幸的是,我不能使用 IIS 或其他 Web 服务器,我只能使用这样的自托管设置或使用 OWIN Katana。

这是我当前的入口点和配置:

这些是我采取的一些额外步骤:

  • 将证书绑定到 HTTPS。netsh http add sslcert ipport=0.0.0.0:5005 appid={ca7f9e45-f183-414f-8baf-b02d88310766} certhash=bd759f39dc966e0ef131cafde4ab273e9c2d5134 clientcertnegotiation=enable
  • 为我的 URL 添加预订条目。netsh http add urlacl url=https://localhost:5005/ user=Everyone