在 c# 中接收 web 服务中的请求?

Posted

技术标签:

【中文标题】在 c# 中接收 web 服务中的请求?【英文标题】:receive requests in web servce rest in c #? 【发布时间】:2021-01-06 06:31:37 【问题描述】:

我在 VS 中用 C#(基本)编写了一个 Web 服务 api rest 项目,我编写了一个目前什么都不做的 POST 方法,它只验证信息是否到达或者我认为它确实有,我想要什么知道的是:当我从客户端程序发送 Json 链时,能够调试从我的 Web 服务发送的请求的接收。 我想看看我的请求是如何到达的。

Web 服务是使用 Visual Studio 中作为示例提供的模板创建的,其中显示 Web API fullRest,添加我的 Web 服务的 POST 和 GET 方法所在的控制器文件夹。基本上我的项目很基础,一切都是模板编程的,我只是添加了方法。

这是我的网络服务休息中 POST 方法的代码:

[Route("api/prueba")]
    [HttpPost]
    public HttpResponseMessage Post([FromBody] datosTarjeta datoTarjeta )
    
        try
        
            if (datoTarjeta != null)
            
                var respuesta = new HttpResponseMessage(HttpStatusCode.OK);

                return respuesta;
            
        
        catch (Exception ex)
        
            var respuesta = new HttpResponseMessage(HttpStatusCode.BadRequest);
            return respuesta;
        
        var respuesta1 = new HttpResponseMessage(HttpStatusCode.BadRequest);
        return respuesta1;

    


这是将 Json 字符串发送到 Web 服务的代码,它在 VB.net 中,它发送一个 Json 字符串:

Imports System
Imports System.Net
Imports System.Text
Imports System.Threading
Imports Newtonsoft.Json

Public Async Sub metodoPost()
    Dim t As New datosTarjeta
    t.Ln_Tarj = "PRO1"
    t.Fiid_Tarj = "B062"
    t.Numero_de_tarjeta = "5359430105739184   "

    Try
        Dim url As String

        url = "http://localhost:60973/api/rest"

        Dim cliente As New Http.HttpClient
        Dim JsonData As String = JsonConvert.SerializeObject(t)
        Dim restContenido As New Http.StringContent(JsonData, Encoding.UTF8, "application/json")
        Dim restRespuesta As Http.HttpResponseMessage = Await cliente.PostAsync(url, restContenido)
        Thread.Sleep(200000)
        Console.WriteLine(restRespuesta.StatusCode.ToString)

    Catch e As Exception
        Dim mensaje As String

        mensaje = e.Message

    End Try


End Sub

如果您能帮助我了解请求在什么时间点到达 Web 服务,或者我可以如何编写一个方法让 Paticion 到达 Web 服务并能够查看请求是如何到达的。 谢谢。

【问题讨论】:

你想了解路由吗? 【参考方案1】:

那个请求可能不会到达,因为你告诉服务器路由是api/prueba

[Route("api/prueba")]
[HttpPost]
public HttpResponseMessage Post([FromBody] datosTarjeta datoTarjeta )

在您发布到api/rest的客户端中

url = "http://localhost:60973/api/rest"

首先,我建议您不要尝试编写客户端和服务器。只需编写服务器,然后使用 Postman 用数据戳它,检查它是否有效。然后编写客户端。与您自己的客户端错误作斗争以及尝试使其配置正确是您不需要的头痛。 Postman 是一个可靠的工具,是一个很好的工具,可以将 JSON 发送到 RESTful webserviecs,就像你在这里一样。在 Post 方法的顶部设置一个断点(将其称为其他名称,例如......它的作用:UpdateUser、CreateOrder、ChangeShippingAddress 等)然后将 url 和数据放入 postman 并点击 Go;您的服务器代码应该会中断,您可以单步执行它

然后你就可以写你的客户端了;输入相同的 url 和数据,点击 Go..


您可以通过将 Swashbuckle、Swagger-Net 或 NSwag 包添加到您的服务器,然后使用 VS 中的 Add REST Client 功能或 AutoRest 工具(或者,显然 NSwag 生成客户端代码也是)..

所有这些“通过手工制作 HTTP 请求来创建客户端”——无聊、重复等等;您没有在服务器端“手动接收和解析 HTTP 请求”,那么为什么不让技术也为您编写客户端; swagger 以标准方式描述服务,这意味着另一个工具可以使用描述并编写具有良好命名方法等的客户端代码

这就像过去的 WCF/ASMX/SOAP/XML/“添加服务引用”(除了那些日子它更容易和更可靠)

【讨论】:

以上是关于在 c# 中接收 web 服务中的请求?的主要内容,如果未能解决你的问题,请参考以下文章

C# Rest 服务 - 无法在服务方法中接收 JSON 请求

是啥使请求成为asp.net C#中的新请求

C# POst 接收或发送XML

从 C# .NET Core(特别是 Workday)调用 Java Web 服务。如何在soap请求中获取xml属性

HTTP-web服务器接收到client请求后的处理过程(很详细)

当 HttpClient 超时时,Web API 控制器中的请求会发生啥?