#c# #asp.net #vb.net #rest #web-services
#c# #asp.net #vb.net #rest #веб-сервисы
Вопрос:
У меня есть проект rest api веб-сервиса на C # (basic) в VS, я программирую метод POST, который на данный момент ничего не делает, он проверяет только поступление информации или то, что я думаю, что это так. ха, что я хочу знать: когда я отправляю цепочку Json из клиентской программы, чтобы иметь возможность отлаживать прием запроса, отправленного с моего веб-сервиса. Я хочу посмотреть, как поступает мой запрос.
Веб-сервис создан с использованием шаблонов, которые представлены в качестве примера в Visual Studio, в котором говорится, что web API fullRest, добавьте папку controllers, в которой расположены методы POST и GET моего веб-сервиса. В основном мой проект очень простой, все запрограммировано шаблоном, я просто добавил методы.
вот мой код для метода POST в моем веб-сервисе rest:
[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 в веб-службу, она находится в 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
Если бы вы могли помочь мне узнать, в какой момент запрос попадает в веб-службу или как я могу запрограммировать метод, чтобы запрос поступал в веб-службу и мог видеть, как поступает запрос.
Спасибо.
Комментарии:
1. Вы пытаетесь понять маршрутизацию?
Ответ №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, а затем используя Add REST Client
функцию в VS или инструмент автоматического восстановления (или, по-видимому, NSwag тоже генерирует код на стороне клиента)..
Все это «создание клиента путем создания HTTP-запроса вручную» — скучно, повторяющееся и т. Д.; Вы не «получали и анализировали HTTP-запрос вручную» На стороне сервера, так почему бы не использовать технологию для написания клиентской части для вас; swagger описывает сервис стандартным способомэто означает, что другой инструмент может использовать описание и писать код на стороне клиента, который имеет красиво названные методы и т. Д
Это похоже на старые времена с WCF / ASMX / SOAP / XML / «Добавить ссылку на службу» (за исключением тех дней, когда это было проще и надежнее)