Добавление пользовательской конечной точки API в базовый шаблон ASP: Net - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь добавить собственную конечную точку для http-запроса. Я скопировал логи c из прогноза погоды, который является частью шаблона asp. net core angular и изменил его:

Оригинальный код Controlelr:

 using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Logging;

    namespace AngularDemo.Controllers
    {
        [ApiController]
        [Route("[controller]")]
        public class WeatherForecastController : ControllerBase
        {
            private static readonly string[] Summaries = new[]
            {
                "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
            };

            private readonly ILogger<WeatherForecastController> _logger;

            public WeatherForecastController(ILogger<WeatherForecastController> logger)
            {
                _logger = logger;
            }

            [HttpGet]
            public IEnumerable<WeatherForecast> Get()
            {
                var rng = new Random();
                return Enumerable.Range(1, 5).Select(index => new WeatherForecast
                {
                    Date = DateTime.Now.AddDays(index),
                    TemperatureC = rng.Next(-20, 55),
                    Summary = Summaries[rng.Next(Summaries.Length)]
                })
                .ToArray();
            }
        }
    }

А это мой TestController

   using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Logging;

    namespace AngularDemo.Controllers
    {
        [ApiController]
        [Route("[controller]")]
        public class TestController: ControllerBase
        {

            private readonly ILogger<WeatherForecastController> _logger;

            public TestController(ILogger<TestController> logger)
            {
                _logger = logger;
            }

            [HttpGet]
            public IEnumerable<string> Get()
            {

                return Enumerable.Range(1, 5).Select(index => new WeatherForecast
                {
                    Date = DateTime.Now.AddDays(index),
                    TemperatureC = 100,
                    Summary = "Test"
                })
                .ToArray();
            }
        }
    }

Но теперь у меня вопрос, как мне вызвать его из моего приложения angular? Это мой компонент в angular, в качестве параметра которого указывается «прогноз погоды». Где я могу настроить его в другом компоненте, который должен сделать запрос к TestController?

Angular Погодный компонент:

import { Component, Inject } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Component({
  selector: 'app-fetch-data',
  templateUrl: './fetch-data.component.html'
})
export class FetchDataComponent {
  public forecasts: WeatherForecast[];

  constructor(http: HttpClient, @Inject('BASE_URL') baseUrl: string) {
    http.get<WeatherForecast[]>(baseUrl + 'weatherforecast').subscribe(result => {
      this.forecasts = result;
    }, error => console.error(error));
  }
}

interface WeatherForecast {
  date: string;
  temperatureC: number;
  temperatureF: number;
  summary: string;
}

1 Ответ

2 голосов
/ 03 марта 2020

Ваш контроллер украшен [Route("[controller]")]. Это означает, что маршрут будет установлен равным имени класса вашего контроллера за вычетом суффикса «Controller».

В вашем случае: TestController эквивалентно [Route("test")].

You затем можете либо изменить имя вашего класса контроллера, либо жестко закодировать аргумент атрибута [Route].

...