gpt4 book ai didi

Angular http 请求无法正常工作

转载 作者:行者123 更新时间:2023-12-05 08:53:53 25 4
gpt4 key购买 nike

Angular 让我疯狂。

我有两个按钮。如果我点击第一个,我想提出这个请求:

https://localhost:44373/api/events

如果我点击第二个,我想发出那个请求:

https://localhost:44373/api/events/1

将调用“getNextPost()”方法,它似乎可以工作,但在服务器端将不会调用指定的方法。

这是我的客户端实现:

 export class AppComponent implements OnInit {
title = 'EventsPresenter';
_hubconnection : signalR.HubConnection;

_notification : string = '';

displayedColumns: string[] = ['eventDateTime', 'nbr', 'element', 'parent', 'stateTypeTitle', 'enumValueTitle', 'customerObject'];

ROOT_URL = 'https://localhost:44373/';
ROOT_API_URL = this.ROOT_URL + 'api/';
dataSource: Observable<EventData[]>;
dataSource2: Observable<EventData>;

constructor(private http: HttpClient) {}

getPosts(){
this.dataSource = this.http.get<EventData[]>(this.ROOT_API_URL + 'events')
}

getNextPost(){
this.dataSource2 = this.http.get<EventData>(this.ROOT_API_URL + 'events/1')
}


ngOnInit() {

this._hubconnection = new signalR.HubConnectionBuilder()
.configureLogging(signalR.LogLevel.Trace)
.withUrl('https://localhost:44373/notify')
.build();

this._hubconnection
.start()
.then(() => console.log('Connection Started'))
.catch(err => console.log('Error while establishing connection'));

this._hubconnection.on('BroadcastMessage', (data: EventData) => {
console.log(data);
this.dataSource.subscribe(v => v.push(data));
});

}
}

这是我的服务器实现:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using convisAPI.DataProvider;
using convisAPI.Interfaces;
using EntityLibrary;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;

namespace convisAPI.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class EventsController : ControllerBase
{
//EventDataProvider eventDataProvider;

IEventDataRepository _eventDataRepository;

IHubContext<NotifyHub> _hubContext;

public EventsController(IEventDataRepository eventDataRepository, IHubContext<NotifyHub> hubContext)
{
_eventDataRepository = eventDataRepository;
_hubContext = hubContext;
}

// GET api/events
[HttpGet]
public async Task<ActionResult<IEnumerable<EventSummary>>> Get()
{
return await _eventDataRepository.GetEvents();
}

// GET api/values/5
[HttpGet("{id}")]
public async Task<ActionResult<EventSummary>> Get(int id)
{

Random r = new Random();

var ra = r.Next(212, 220);

await _hubContext.Clients.All.SendAsync("BroadcastMessage", new EventSummary()
{
Element = "Mein Element " + ra,
Details = "Das ist mein Eventgrund",
EventID = Guid.NewGuid(),
ElementID = Guid.NewGuid(),
EventDateTime = DateTime.Now,
Nbr = ra,
StateNbr = ra,
EnumValueTitle = "Störung",
StateEnumValue = 110 + ra
});


return new EventSummary();



}

// POST api/values
[HttpPost]
public void Post([FromBody] string value)
{
}

// PUT api/values/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
}

// DELETE api/values/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
}

我知道代码“Get(int id)”对您来说可能看起来很奇怪,但我基本上想触发 SignalR 通知。

有什么想法吗?

最好的问候

最佳答案

在 Angular 中,每个 HTTP 请求只会在有人收听它们时“触发”。

因此,如果没有人订阅,则不会有任何 http 请求。

getPosts(){
this.http.get<EventData[]>(this.ROOT_API_URL + 'events')
.subscribe(result => this.dataSource = result)
}

getNextPost(){
this.http.get<`EventData>(this.ROOT_API_URL + 'events/1')
.subscribe(result => this.dataSource2 = result)
}

我会写得有点不同,但那是个人风格而不是

getPosts(){
this.dataSource = this.http.get<EventData[]>(this.ROOT_API_URL + 'events')
}

我会写

getPosts():Observable<EventData[]>{
return this.http.get<EventData[]>(this.ROOT_API_URL + 'events')
}

然后我会在需要数据的时候订阅。

...
this.getPosts().subscribe(result => this.isWhereINeedit = result)

亲切的问候

关于 Angular http 请求无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52204376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com