问题可能是由于路由配置不正确导致的。在ASP.NET Core 2.2中,使用Angular和SignalR的路由配置可能会有一些特殊的需求。
下面是一个可能的解决方案,其中包括了一个示例代码:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseSignalR(routes =>
{
routes.MapHub("yourhub");
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller}/{action=Index}/{id?}");
// 添加一个特殊的路由以处理Angular路由请求
routes.MapSpaFallbackRoute(
name: "spa-fallback",
defaults: new { controller = "Home", action = "Index" });
});
...
}
在Angular的app-routing.module.ts文件中,确保你有一个路由处理SignalR的请求。这可能看起来像这样:
const routes: Routes = [
...
{ path: 'yourhub/negotiate', component: YourHubNegotiateComponent },
...
];
在Angular应用程序中创建一个名为YourHubNegotiateComponent的组件。这个组件将负责处理SignalR的Negotiate请求并返回结果。
import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Component({
selector: 'app-your-hub-negotiate',
template: ''
})
export class YourHubNegotiateComponent implements OnInit {
constructor(private http: HttpClient) { }
ngOnInit() {
this.http.get('/yourhub/negotiate').subscribe(result => {
// 处理结果
});
}
}
通过以上步骤,你应该能够正确处理SignalR的Negotiate请求,并避免返回404错误。当然,具体解决方法可能因你的应用程序结构而异,但上述步骤提供了一个基本的解决方案。