#post #blazor #fiddler
#Публикация #blazor #скрипач
Вопрос:
Я запускаю серверное приложение blazor, которое было развернуто в IIS. На сайте есть веб-служба REST в качестве серверной части. Код выглядит примерно так:
<EditForm Model="@boundObject" OnValidSubmit="HandleValidSubmit">
<td>
<input type="checkbox" @bind="boundbject.HasCar" />
</td>
<button type="submit">Submit</button>
</EditForm>
@code {
private void HandleValidSubmit(object handler)
{
if(boundObject.HasCar)
{
webService.WriteHasCar(boundObject.objectID,true)
}
}
}
Это работает просто отлично, но, глядя на сетевой трафик в Fiddler, когда я отправляю этот запрос, я вижу, что запрос на ИСПРАВЛЕНИЕ отправляется на веб-сервис, который выполняет вызов веб-службы, но я не вижу запроса POST, когда я нажимаю кнопку отправки. Чего мне здесь не хватает? Трассировка скрипача не видит ее или мой код не генерирует POST-запрос? И если это не так, как значение флажка попадает на сервер?
Комментарии:
1. Вы отправляете исправление и ожидаете, что это будет post? POST, PUT, PATCH, GET, DELETE — все разные. ИСПРАВЛЕНИЕ в наши дни не очень распространено, но все еще поддерживается.
2. Исправление происходит в веб-службе line. WriteHasCar, когда это веб-приложение переходит на серверную веб-службу. Я спрашиваю, почему я не вижу запроса post при нажатии отправки. Я вижу трафик между моим веб-приложением и веб-сервисом. Трафик, который я не вижу, — это запрос post между браузером и этим веб-приложением.
3. Если он отправляет ИСПРАВЛЕНИЕ, вашему контроллеру нужен метод ИСПРАВЛЕНИЯ. Например, используя атрибут [HttpPatch(«{id: int}»)] .
4. Я думаю, вы зациклились на ИСПРАВЛЕНИИ. ПАТЧ в порядке. Я спрашиваю, почему я не вижу запроса POST при отправке формы в приложении blazor server.
Ответ №1:
Вы не можете увидеть запрос Post, потому что запрос post не выполняется. Ваша форма не отправлена. Традиционный запрос post не возникает, хотя вы используете кнопку отправки. Действие отправки перехватывается Blazor и отменяется, поскольку это приложение SPA с четко определенными границами пространства. Обычно вы не выходите за эти границы, и если вы это делаете, например, переходите на внешнюю страницу входа, ваш SPA больше не существует. Когда вы перенаправляетесь обратно, оно восстанавливается…
Серверные приложения Blazor не используют протокол HTTP, а скорее SignalR. Все коммуникации между клиентской частью (браузером) и серверной частью серверного приложения Blazor выполняются через SignalR.
Обратите внимание, что первоначальный запрос к вашему приложению — это запрос HTTP get. Это единственный раз, когда используется HTTP, а не SignaR
Комментарии:
1. Спасибо, энет, это тот ответ, который я искал. Я подумал, что это, вероятно, что-то фундаментальное для Blazor. Можете ли вы порекомендовать какие-либо сведения о том, что такое SignalR и как Blazor работает с ним?
2. @yellephen Согласно документации SignalR будет использовать WebSockets, когда он будет доступен. Поэтому прокси с поддержкой WebSocket должен работать. Согласно документации Fiddler ) Должны поддерживаться WebSockets (на данный момент не могу найти его в последней версии Fiddler).