Я следовал учебному пособию по ASP.NET Core и писал свой собственный код, когда столкнулся с неизвестной проблемой, которая вызывает много ошибок. Я знаю, что парень из учебника работает на ASP.NET Core 2.2.4, а на ASP.NET Core 2.2.6.
Ошибка в контроллере. Вот класс:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Domain;
using Persistance;
namespace API.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
// With access to the Database Context, this controller can talk to the Database,
// reading and updating values.
private readonly DatabaseContext _DbContext;
// CONSTRUCTOR INJECTION: Injecting the DatabaseContext service into the Values
// class.
public ValuesController(DatabaseContext dbContext)
{
this._DbContext = dbContext;
}
// GET api/values
// This is made an Async method to push a task into a second thread: the act
// of calling the database and retrieving the query results. By doing this, you
// avoid blocking the main thread.
[HttpGet]
public async Task<ActionResult<IEnumerable<Value>>> Get()
{
// Retrieve a List of values from the 'Values' table.
var listOfValues = await _DbContext.Values.ToListAsync();
// Return HTTP Status Code 200, along with the retrieved list of values.
return Ok(listOfValues);
}
// GET api/values/5
[HttpGet("{id}")]
public async Task<ActionResult<Value>> Get(int id)
{
// There are several methods to help you get values from databases
// asynchronously: FindAsync(), FirstOrDefaultAsync(), SingleAsync(), and
// SingleOrDefaultAsync(). FindAsync() is used here because it is the most
// appropriate - it will search the database by primary key and return the
// value if found or 'null' if not.
var searchValue = await _DbContext.Values.FindAsync(id);
return Ok(searchValue);
}
// POST api/values
[HttpPost]
public void Post([FromBody] string value)
{
}
// PUT api/values/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
}
// DELETE api/values/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
}
Большая часть его была сгенерирована из шаблона, и я начал изменять его в соответствии с руководством. Там, где нет проблем, пока я не начал работать над Get (int id). Именно тогда Visual Studio Code начал постоянно выдавать мне ошибки. Насколько я могу сказать, я сделал все с помощью учебника.
Если между методами Get () и Get (int id) есть два пробела, заголовок последнего метода получает несколько красных подчеркиваний. В частности, ключевые слова «ActionResult», «Value», «Get», «int» все подчеркнуты, а также последние «>» и «)» в заголовке метода.
Ошибки жалуются на:
Syntax error, ','(CS1003)
Syntax error, '>'(CS1003)
Syntax error,> ','(CS1003)
Syntax error, ','(CS1003)
Syntax error, ','(CS1003)
Tuple must contain at least two elements. [...\Reactivities\API\API.csproj](CS8124)
Identifier expected [...\Reactivities\API\API.csproj](CS1001)
) expected [...(CS1026)
Если я настолько уменьшу разрыв между методами Get () и Get (int id) с двух до одной строкивсе красные волнистые линии в заголовке метода исчезают, и вместо этого только открывающая фигурная скобка в Get (int id) получает красную волнистую линию.
Это связанные ошибки:
Syntax error, ','(CS1003)
Syntax error, '>'(CS1003)
Identifier expected [...\Reactivities\API\API.csproj](CS1001)
Syntax error, ','(CS1003)
Syntax error, ','(CS1003)
Identifier expected [...\Reactivities\API\API.csproj](CS1001)
Syntax error, ','(CS1003)
Tuple must contain at least two elements. [...\Reactivities\API\API.csproj](CS8124)
Identifier expected [...\Reactivities\API\API.csproj](CS1001)
) expected [...(CS1026)
Я думаю, что это какая-то синтаксическая ошибка, но я не знаю, что это может быть. Кто-нибудь хочет взглянуть на этот код, пожалуйста?