C# InvalidCastException:无法强制转换类型为';System.Guid';输入';System.String';。在asp.net核心webapi中

C# InvalidCastException:无法强制转换类型为';System.Guid';输入';System.String';。在asp.net核心webapi中,c#,asp.net-core,webapi,C#,Asp.net Core,Webapi,您好,我正在asp.net core中创建一个webapi,当我调用控制器时,它会抛出错误,这显示了我如何创建模型和控制器。 型号: 控制器: [Route("api/[controller]")] [ApiController] public class CDProjectController : ControllerBase { private readonly CDDbcontext _context; public CDProjectController(CDDbcon

您好,我正在asp.net core中创建一个webapi,当我调用控制器时,它会抛出错误,这显示了我如何创建模型和控制器。 型号:

控制器:

[Route("api/[controller]")]
[ApiController]
public class CDProjectController : ControllerBase
{
    private readonly CDDbcontext _context;

    public CDProjectController(CDDbcontext context)
    {
        _context = context;
    }

    // GET: api/DCandidate
    [HttpGet]
    public async Task<ActionResult<IEnumerable<tblProject>>> GetDCandidates()
    {
        return await _context.tblProject.ToListAsync();
    }

    // GET: api/DCandidate/5
    [HttpGet("{id}")]
    public async Task<ActionResult<tblProject>> GetDCandidate(Guid prj_id)
    {
        var dCandidate = await _context.tblProject.FindAsync(prj_id);

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

        return dCandidate;
    }
[路由(“api/[控制器]”)]
[ApiController]
公共类CDProjectController:ControllerBase
{
私有只读CDDbcontext_context;
公共CDProjectController(CDDbcontext上下文)
{
_上下文=上下文;
}
//获取:api/DCandidate
[HttpGet]
公共异步任务GetDCandidates()
{
return wait_context.tblProject.toListSync();
}
//获取:api/DCandidate/5
[HttpGet(“{id}”)]
公共异步任务GetDCandidate(Guid prj_id)
{
var dCandidate=wait _context.tblProject.FindAsync(prj_id);
如果(dCandidate==null)
{
返回NotFound();
}
返回日期;
}

var dCandidate=await\u context.tblProject.where(p=>p.prj\u id==prj\u id).singleOrdefault();

首先需要检查列数据类型varchar或nvarchar中的sql表。在c中之后,方法调用传递guid参数来设置字符串类型

范例

string prj_id=System.Guid.NewGuid().ToString();
var dCandidate=await _context.tblProject.Where(p=>p.prj_id==prj_id).SingleOrDefault();

查看另一个示例

创建MathStudents1表 ( Id UNIQUEIDENTIFIER主键默认NEWID(), 学生名VARCHAR(50)

) 去

插入MathStudents1值(默认值为'Sally')
插入MathStudents1值(默认值为'Edward')

在我使用[FromRoute]时发现错误,它正在工作感谢所有人的回答
检查或删除
Null

这与aspnet/core或webapi无关,与您如何调用我假设的实体框架方法(
FindAsync
)有关。该方法不接受Guid,您需要添加一个
到字符串
,或者由于
属性,它应该接受Guid,但上下文未正确配置DHI。哪个方法引发异常,
GetCandidates()
,或者
GetCandidate(Guid prj\U id)
?对异常的完整堆栈跟踪将非常有用。还请注意,您的参数名称
prj_id
GetDCandidate
方法中的路由路径
id
参数不匹配,因此它总是得到空guid值,因此您总是得到NotFound()在此方法中..我无法使用您的代码重现您的问题。您的请求url是什么?您的模型设计是什么?我在请求任何post或get操作时遇到错误。我不知道如何使用GUI执行web api操作。我在调用获取所有数据时遇到错误。公共异步任务GetDCandidates(){return await _context.tblProject.ToListAsync();}
[Route("api/[controller]")]
[ApiController]
public class CDProjectController : ControllerBase
{
    private readonly CDDbcontext _context;

    public CDProjectController(CDDbcontext context)
    {
        _context = context;
    }

    // GET: api/DCandidate
    [HttpGet]
    public async Task<ActionResult<IEnumerable<tblProject>>> GetDCandidates()
    {
        return await _context.tblProject.ToListAsync();
    }

    // GET: api/DCandidate/5
    [HttpGet("{id}")]
    public async Task<ActionResult<tblProject>> GetDCandidate(Guid prj_id)
    {
        var dCandidate = await _context.tblProject.FindAsync(prj_id);

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

        return dCandidate;
    }