Linqpad 6 (ядро) и .Net Core API?

Linqpad 6 поддерживает .Net Core.
Когда я создаю новое пустое решение .Net Core API в Visual Studio, я получаю простой шаблон с простым демонстрационным контроллером.

Linqpad 6 (ядро) и .Net Core API?

Когда я запускаю его в Visual Studio, он использует сервер командной строки (kestrel) для запуска проекта:

Linqpad 6 (ядро) и .Net Core API?

Поэтому я хотел посмотреть, смогу ли я запустить этот проект в Linqpad 6.

Итак, я установил все nugets и скопировал код в Linqpad:

https://i.stack.imgur.com/lwRyU.png

void Main()
{

    CreateWebHostBuilder(new string[] { "" }).Build().Run();

}

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();

[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{

    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
        return new string[] { "value1", "value2" };
    }

}


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.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    }

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

Я вижу, что он сейчас слушает:

Linqpad 6 (ядро) и .Net Core API?

Но вызовы http://localhost:5000/api/values действительно получают подтверждение, но без ответа значения json от контроллера:

Linqpad 6 (ядро) и .Net Core API?

Вопрос:

Как я могу заставить Linqpad возвращать значение из контроллера? (простой json)

Не могли бы вы опубликовать хотя бы код в виде текста, а не в виде изображения? Облегчает тестирование и другим.

Lasse V. Karlsen 22.07.2019 17:26

@LasseVågsætherKarlsen это в ссылке в вопросе: jsbin.com/zovicuduto/edit?html. Я вставил его как изображение, чтобы люди могли видеть, как оно отображается в Linqpad. Если я вставлю его, код контроллера будет слишком длинным.

Royi Namir 22.07.2019 17:27

Как вы делаете запрос?

Chris Pratt 22.07.2019 17:34

@ChrisPratt через браузер. i.imgur.com/3w2GBCX.jpg

Royi Namir 22.07.2019 17:36
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
1 164
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть разница в том, как LINQPad выполняет код, который может объяснить, что это не работает.

Будучи инструментом сценариев, LINQPad упаковывает все в класс (иначе методу Main негде было бы жить). Таким образом, ValuesController на самом деле оказывается вложенным типом, UserQuery.ValuesController, и это потенциально может нарушить работу API маршрутизации.

Для таких ситуаций в LINQPad есть возможность извлекать все вложенные типы и перемещать их за пределы UserQuery (используя Roslyn API). Чтобы включить это, добавьте следующее в начало вашего запроса:

#LINQPad nonest

Еще следует учитывать, что проект MVC по умолчанию включает файл appsettings.json. Если это требуется для вашего кода в LINQPad, вам нужно создать такой файл и добавить ссылку на него (когда вы ссылаетесь на недвоичный файл, LINQPad копирует его в выходную папку, а именно туда, где требуется appsettings.json). быть).

Обновлено: Теперь есть флажок в диалоговом окне Свойства запроса, чтобы добавить ссылки ASP.NET Core в запрос в LINQPad 6. Это извлекает сборки прямо из общей папки платформы, и это проще, чем поиск нужных пакетов NuGet.

Оно работает ! (настройки приложения должны быть добавлены, как вы сказали) - i.imgur.com/9v8xpo1.jpg. Большое спасибо, Джо.

Royi Namir 23.07.2019 11:25

Другие вопросы по теме