Получено 404 Ошибка на веб-сервисе с использованием .Net Core - PullRequest
0 голосов
/ 15 октября 2018

Так что, действительно, это первая попытка создать веб-сервис REST и работа с любым веб-материалом.Следовали этому руководству: http://www.patrickschadler.com/creating-a-rest-webservice-with-net-core/

В нем используется очень простой подход (как этот подход, так как мне не требуется все вредоносное ПО, которое добавляется при выборе « Веб-приложение »опция).

Тем не менее, как я следовал примеру:

  1. Запустил программу как есть (увидел ответ hello world)
  2. Затем добавил запись для чтенияконтроллер
  3. Добавлены элементы в Startup.cs

Затем попытался вызвать: https://localhost:44325/api/r_w, это привело к ответу 404, который я вижу в окне вывода отладки проектаи в браузере.

Я осмотрелся, и многие люди используют выбор Веб-приложение , добавляя несколько других файлов и зависимостей, и решения этих проблем не помогают.

Первоначально я думал, что это было с тем, как выписан маршрут:

        app.UseMvc(routes =>
        {
            routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");

        });

Однако, поскольку некоторые решения, которые я искал, предложили изменить маршрут, не оказали на меня никакого влиянияк сожалению.

Я даже пытался использовать routedebugger, однако в Dependencies / Nuget в обозревателе решений он показывает, что существуют проблемы с совместимостью, и он не будет работать должным образом.

Затем выяснилось, что это очень полезно: https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-2.1

Ниже приведен файл запуска:

public class Startup
{
    public IConfiguration Configuration { get; }

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }
    // This method gets called by the runtime. Use this method to add services to the container.
    // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        //app.Run(async (context) =>
        //{
        //    await context.Response.WriteAsync("Hello World!");
        //});
        app.UseStaticFiles();
        //app.UseMvc();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");

        });
    }
}

Небольшой фрагмент из контроллера чтения / записи (полностью без измененийс того момента, когда человек добавляет его в проект):

namespace deliver_data.wwwroot.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class r_wController : ControllerBase
{
    // GET: api/r_w
    [HttpGet]
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

Очень хотел бы, чтобы этот пример работал, кажется, самый простой.Просто не понимаю, почему это не сработает.Есть ли серьезное отсутствие понимания чего-либо с моей точки зрения?

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Ваше пространство имен здесь выглядит необычно - Это предполагает, что у вас есть структура папок, которая выглядит примерно так:

  • wwwroot
    • Контроллеры
      • r_wController.cs
  • delivery_data.csproj
  • ...

Классы контроллеров, которые находятся внутри wwwroot не будет выбрано: это специальная папка в ASP.NET Core, представляющая необработанные ресурсы, которые вы хотите, чтобы ваше приложение обслуживало.

Чтобы это исправить, потяните папку Controllers вверхуровень вне папки wwwroot, например:

  • Контроллеры
    • r_wController.cs
  • wwwroot
    • ...
  • delivery_data.csproj
  • ...
0 голосов
/ 15 октября 2018

Попробуйте с:

namespace deliver_data.wwwroot.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class r_wController : ControllerBase
    {
       // GET: api/r_w
       [HttpGet]
       public IHttpActionResult Get()
       {
           return new string[] { "value1", "value2" };
       }
...