Linqpad 6 поддерживает .Net Core.
Когда я создаю новое пустое решение .Net Core API в Visual Studio, я получаю простой шаблон с простым демонстрационным контроллером.
Когда я запускаю его в Visual Studio, он использует сервер командной строки (kestrel) для запуска проекта:
Поэтому я хотел посмотреть, смогу ли я запустить этот проект в 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();
}
}
Я вижу, что он сейчас слушает:
Но вызовы http://localhost:5000/api/values
действительно получают подтверждение, но без ответа значения json от контроллера:
Вопрос:
Как я могу заставить Linqpad возвращать значение из контроллера? (простой json)
@LasseVågsætherKarlsen это в ссылке в вопросе: jsbin.com/zovicuduto/edit?html. Я вставил его как изображение, чтобы люди могли видеть, как оно отображается в Linqpad. Если я вставлю его, код контроллера будет слишком длинным.
Как вы делаете запрос?
@ChrisPratt через браузер. i.imgur.com/3w2GBCX.jpg
Есть разница в том, как 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. Большое спасибо, Джо.
Не могли бы вы опубликовать хотя бы код в виде текста, а не в виде изображения? Облегчает тестирование и другим.