Не удается запустить этот простой учебный код ASP.NET - PullRequest
0 голосов
/ 10 ноября 2018

Я следовал инструкциям этого превосходного учебника по ASP.NET , но не могу заставить его работать вообще после нескольких часов попыток.

В коде нет ничего плохого, но либо сервер не отвечает по Почтальону, либо существует исключение времени выполнения, которое не сработало. Я должен признать, что я совершенно новичок в ASP.NET, поэтому я не знаю, что еще делать.

Я сделал публичное репо на Github для удобства. Заранее спасибо за помощь.

The project structure

StartUp.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using ToDoListWebApi.Services;

namespace ToDoListWebApi
{
    public class Startup
    {
        // 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()
                .SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_2_1);

            services.AddSingleton<IIventoryServices, InventoryServices>();

        }

        // 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();
            }
            else
            {
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseMvc();

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

InventoryController.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using ToDoListWebApi.Models;
using ToDoListWebApi.Services;

namespace ToDoListWebApi.Controllers
{
    [Route("v1/")]
    [ApiController]
    public class InventoryController : ControllerBase
    {
        private readonly InventoryServices _services;

        public InventoryController(InventoryServices services)
        {
            _services = services;
        }

        [HttpPost]
        [Route("AddInventoryItems")]
        public ActionResult<InventoryItems> AddInventoryItems(InventoryItems items)
        {
            var inventoryItems = _services.AddInventoryItems(items);

            if (inventoryItems == null)
            {
                return NotFound();
            }

            return inventoryItems;
        }

        [HttpGet]
        [Route("GetInventoryItems")]
        public ActionResult<Dictionary<string,InventoryItems>> GetInventoryItems()
        {
            var inventoryItems = _services.GetInventoryItems();

            if (inventoryItems.Count == 0)
            {
                return NotFound();
            }

            return inventoryItems;
        }
    }
}

InventoryItems.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace ToDoListWebApi.Models
{
    public class InventoryItems
    {
        public int Id { get; set; }
        public string ItemName { get; set; }
        public double Price { get; set; }
    }
}

IInventoryServices.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using ToDoListWebApi.Models;

namespace ToDoListWebApi.Services
{
    public interface IIventoryServices
    {
        InventoryItems AddInventoryItems(InventoryItems items);
        Dictionary<string, InventoryItems> GetInventoryItems();
    }
}

InventoryServices.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using ToDoListWebApi.Models;

namespace ToDoListWebApi.Services
{
    public class InventoryServices : IIventoryServices
    {
        private readonly Dictionary<string, InventoryItems> _inventoryItems;

        public InventoryServices()
        {
            _inventoryItems = new Dictionary<string, InventoryItems>();
        }

        public InventoryItems AddInventoryItems(InventoryItems items)
        {
            _inventoryItems.Add(items.ItemName, items);

            return items;
        }

        public Dictionary<string, InventoryItems> GetInventoryItems()
        {
            return _inventoryItems;
        }
    }
}

Параметры запроса Json для URL https://localhost:port/v1/AddInventoryItems

{
  "Id": "1",
  "ItemName": "Weed Eater",
  "Price": 430
}

Скриншот почтальона: Postman screenshoot

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

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

0 голосов
/ 10 ноября 2018

Я бы сделал этот комментарий, если бы у меня было достаточно повторений. Вы убедились, что IIS работает? Должен увидеть его на панели инструментов скрытых значков на рабочем столе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...