SignalR При вызове connection.StartAsync () из клиента Blazor WASM Ошибка 500 Patterns.RoutePatternException

Я получаю ошибку 5000 на стороне сервера с Patterns.RoutePatternException и сообщением:

Microsoft.AspNetCore.Routing.Patterns.RoutePatternException: в шаблоне маршрута есть неполный параметр. Убедитесь, что каждому символу '{' соответствует соответствующий символ '}'.

Я получаю следующее исключение на стороне сервера;

15.09.2020 21:06:17 -05: 00 Ошибка Произошло необработанное исключение при выполнении запроса. Microsoft.AspNetCore.Routing.Patterns.RoutePatternException: в шаблоне маршрута есть неполный параметр. Убедитесь, что каждому символу '{' соответствует соответствующий символ '}'. в Microsoft.AspNetCore.Routing.Patterns.RoutePatternParser.Parse (шаблон строки) в Microsoft.AspNetCore.Routing.Patterns.RoutePatternFactory.Parse (шаблон строки) в Microsoft.AspNetCore.Mvc.Routing.ActionEndpointFactory.Add_1 routepoints (ActionEndpointFactory.Add_1 routepoctors , Условные обозначения IReadOnlyList1 routes, IReadOnlyList1, логические createInertEndpoints) в Microsoft.AspNetCore.Mvc.Routing.ControllerActionEndpointDataSource.CreateEndpoints (соглашения IReadOnlyList1 actions, IReadOnlyList1) в Microsoft.AspNetCore.Mvc.RoutEndpoint.Microsoft.AspNetCore.Mvc. )

Это мое второе приложение с Blazor / Core ASP 3.1, и я попытался скопировать первое рабочее. На стороне клиента код попадает в StartAsync ()

  Log.Warning("top of start service");
  connection = new HubConnectionBuilder()
      .WithUrl(url)
      .Build();

  Log.Warning("after connect in start service");
  connection.Closed += async (error) =>
  {
    await Task.Delay(new Random().Next(0, 5) * 1000);
    await connection.StartAsync();
  };
  connection.Reconnecting += error =>
  {
    Log.Error("Connection Lost attempting to reconnect: {@error}", error);

    // Notify users the connection was lost and the client is reconnecting.
    // Start queuing or dropping messages.

    return Task.CompletedTask;
  };
  try
  {
    Log.Warning("before start async");
    await connection.StartAsync();
    Log.Warning("after start async");

Program.cs

  var config = new ConfigurationBuilder()
      .AddJsonFile("appsettings.json")
      .Build();

  Log.Logger = new LoggerConfiguration()
      .ReadFrom.Configuration(config)
      .CreateLogger();

  try
  {

    CommandLine.Parser.Default.ParseArguments<Options>(args)
      .WithParsed(RunOptions)
      .WithNotParsed(HandleParseError);

    BuildWebHost(args).Build().Run();
  }
  catch (Exception e)
  {
    Console.WriteLine(e.Message);
  }
}

public static IHostBuilder BuildWebHost(string[] args) =>

    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
          webBuilder.UseStartup<Startup>();
          _ = webBuilder.UseUrls("http://*:8080");
        }).UseSerilog();

Startup.cs

  public class Startup
  {
    public Startup(IConfiguration configuration)
    {
      Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
      services.AddCors(o => o.AddPolicy("CorsPolicy", builder =>
      {
        builder
        //.WithOrigins("http://localhost:44322")
        .AllowAnyMethod()
        .AllowAnyHeader()
        .AllowAnyOrigin();
      }));

      services.AddSignalR();

      services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
      if (env.IsDevelopment())
      {
        //app.UseStatusCodePagesWithReExecute("/Error");
        app.UseDeveloperExceptionPage();
      }
      else
      {
        app.UseStatusCodePagesWithReExecute("/Error");
        //app.UseHsts();
      }
      app.UseCors("CorsPolicy");
      app.UseDefaultFiles();
      app.UseStaticFiles();
      app.UseRouting();


      //var hubConfiguration = new HubConfiguration();


      app.UseEndpoints(endpoints =>
      {
        endpoints.MapHub<ShowsHub.BlazingShowsHub>("/shows");

        endpoints.MapDefaultControllerRoute();
      });

    }

Предложения?


person Darryl Wagoner WA1GON    schedule 16.09.2020    source источник
comment
Что-то не так с вашим шаблоном маршрута. Проверьте свой шаблон маршрута, например: [Route("api/users/{userId/login")] отсутствует }.   -  person Michael Wang    schedule 16.09.2020
comment
Это должен был быть ответ, чтобы я мог проголосовать за него и пометить его как решенный. Мне никогда не приходило в голову, что это было в контроллере, потому что я не использовал контроллеры. Спасибо!   -  person Darryl Wagoner WA1GON    schedule 16.09.2020


Ответы (1)


Microsoft.AspNetCore.Routing.Patterns.RoutePatternException: в шаблоне маршрута есть неполный параметр. Убедитесь, что каждому символу '{' соответствует соответствующий символ '}'.

Из RoutePatternException, который вы публикуете, мы видим, что что-то не так с шаблоном маршрута контроллера. Проверьте свой шаблон маршрута: [Route("api/users/{userId/login")] отсутствует }.

person Michael Wang    schedule 16.09.2020