.NET CORE web api Изменения не обнаружены - PullRequest
0 голосов
/ 22 февраля 2019

В настоящее время я работаю над приложением VueJS, использующим .NET Core 2.2 для серверной части.Я работал над этим в течение нескольких месяцев, но он неожиданно перестал работать как чудо, когда я обновил с 2.0 до 2.2

Мои изменения веб-API не обнаружены, и я не знаю почему. Например, у меня естьНесколько контроллеров и всякий раз, когда я меняю их, а затем использую веб-API, изменения не вносятся.Я могу даже удалить весь файл, и веб-API, использующий этот файл, все еще будет работать!Другая проблема, которую я получаю, заключается в том, что когда я создаю новые файлы контроллеров, они тоже не обнаруживаются, я застрял на своих старых контроллерах и не могу их обновить.Обнаружены обновления других файлов (по крайней мере, если я изменю интерфейс vueJS), я также могу сменить провайдеров, удалить любой файл, используемый для веб-API, изменения не обнаружены.Это может быть проблема с конфигурацией?

Могу ли я попытаться сделать что-то для обновления снова?

Обновление: я могу изменить все, что захочу в бэк-энде, и он ничего не сделает вфакт.Ошибки компиляции - единственная проблема, о которой мне нужно заботиться, это как будто приложение больше не использует код.

Вот пример, который я могу предоставить:

У меня есть контроллер "InterventionController"которые извлекают данные об операциях (я французский на французском, поэтому имена переменных и т. д. будут на французском):

using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Vue2Spa.Models;
using Vue2Spa.Providers;

namespace Vue2Spa.Controllers
{
    [Produces("application/json")]
    [Route("api/[controller]")]
    [ApiController]
    public class InterventionController : Controller
    {
        private readonly IInterventionProvider interventionProvider;


        public InterventionController(IInterventionProvider interventionProvider)
        {
            this.interventionProvider = interventionProvider;
        }

        [HttpGet("[action]")]
        public IActionResult Interventions([FromQuery(Name = "from")] int from = 0, [FromQuery(Name = "to")] int to = 5000)
        {

            var quantity = to - from;

            if (quantity <= 0)
            {
                return BadRequest("La quantité doit être positive !");
            }
            else if (from < 0)
            {
                return BadRequest("Vous devez spécifier un indice de départ non nul !");
            }

            var allInterventions = interventionProvider.GetInterventions();

            var result = new
            {
                TotalInterventions = allInterventions.Count,
                Interventions = allInterventions.Skip(from).Take(quantity).ToArray()       
            };

            return Ok(result);
        }
    }

    // Others methods not useful for my example
}

Он вызывает провайдера, который имеет следующий код:

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Vue2Spa.Models;

namespace Vue2Spa.Providers
{
    public class DBInterventionProvider : IInterventionProvider
    {

        private List<Intervention> interventions { get; set; }
        DbContextOptionsBuilder<DepouillementTestContext> optionsBuilder = new DbContextOptionsBuilder<DepouillementTestContext>();

        public DBInterventionProvider()
        {
            optionsBuilder.UseSqlServer(credentials); // Credentials are correct but not including it there for obvious reasons
            using (var context = new LECESDepouillementTestContext(optionsBuilder.Options))
            {
                interventions = context.Intervention.ToList();
            }
        }

        public List<Intervention> GetInterventions()
        {
            using (var context = new LECESDepouillementTestContext(optionsBuilder.Options))
            {
                interventions = context.Intervention.ToList();
            }
            return interventions;
        }

    // Others methods not useful for this example

    }
}

Я могу удалить файлы тезисов, и я все еще могу получить доступ к своим операционным веб-интерфейсам

При необходимости, вот мой файл startup.cs

using System;
using System.Reflection;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.SpaServices.Webpack;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Diagnostics;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Vue2Spa.Models;

namespace Vue2Spa
{
    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)
        {
            // Add framework services.
            services.AddMvc();

            // Additional code for SQL connection

            services.AddDbContext<DepouillementTestContext>(options =>
            {
                options.UseSqlServer(Configuration["ConnectionString"],
                sqlServerOptionsAction: sqlOptions =>
                {
                    sqlOptions.
                        MigrationsAssembly(
                            typeof(Startup).
                            GetTypeInfo().
                                Assembly.
                                GetName().Name);

                    //Configuring Connection Resiliency:
                    sqlOptions.
                        EnableRetryOnFailure(maxRetryCount: 5,
                        maxRetryDelay: TimeSpan.FromSeconds(30),
                        errorNumbersToAdd: null);

                });

                // Changing default behavior when client evaluation occurs to throw.
                // Default in EFCore would be to log warning when client evaluation is done.
                options.ConfigureWarnings(warnings => warnings.Throw(
                    RelationalEventId.QueryClientEvaluationWarning));
            });

            // Provider pour les interventions
            services.AddSingleton<Providers.IInterventionProvider, Providers.DBInterventionProvider>();

        }

        // 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();

                // Webpack initialization with hot-reload.
                app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
                {
                    HotModuleReplacement = true,
                });
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

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

                routes.MapSpaFallbackRoute(
                    name: "spa-fallback",
                    defaults: new { controller = "Home", action = "Index" });
            });
        }
    }
}

Заранее спасибо,

1 Ответ

0 голосов
/ 22 февраля 2019

Ну, я понял, почему у меня возникла эта проблема, и я чувствую себя немного глупо, но теперь она работает.

Я не менял файл launch.json при обновлении с .NETCORE 2.0.до 2.2 все, что мне нужно было сделать, это изменить

"program": "${workspaceFolder}/content/bin/Debug/netcoreapp2.0/Vue2Spa.dll",

на

"program": "${workspaceFolder}/content/bin/Debug/netcoreapp2.2/Vue2Spa.dll",

Для получения дополнительной информации см .: https://docs.microsoft.com/en-us/aspnet/core/migration/21-to-22?view=aspnetcore-2.2&tabs=visual-studio

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