You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure可验证凭据.NET示例:如何将Query String绑定到属性?

问题:在Microsoft可验证凭据示例中动态传递表单查询参数失败

我正在使用Microsoft的可验证凭据示例项目,希望替换示例中固定的凭据声明值,改用Index页面表单中输入的查询参数(比如名为firstname的输入框)。目前能在结果页面URL中看到这些参数,但无法正确将其传入凭据发行请求。

我尝试过的方法

  • 方法1:直接从请求查询中取值
    payload["issuance"]["claims"]["given_name"] = HttpContext.Request.Query["firstname"].ToString();
    
  • 方法2:使用[FromQuery]绑定属性
    先定义类属性:
    [FromQuery(Name = "firstname")]
    public string firstname { get; set; }
    
    再赋值到payload:
    payload["issuance"]["claims"]["given_name"] = firstname;
    

遇到的错误

两种方法都触发相同错误:

"Missing provided claims in issuance: [given_name]","target":"issuance.claims"

参考信息:当前使用的方法签名是

public async Task<ActionResult> IssuanceRequest()

我对.NET不熟悉,请问正确的实现方式是什么?


正确实现步骤

  1. 修正方法签名,添加参数绑定
    你当前的方法签名没有参数绑定逻辑,导致[FromQuery]无法生效。需要修改方法签名,直接把查询参数作为方法参数传入:

    public async Task<ActionResult> IssuanceRequest([FromQuery(Name = "firstname")] string firstname)
    

    这样ASP.NET Core会自动从URL查询字符串中提取firstname参数并绑定到该参数上。

  2. 先验证参数是否获取成功
    可以先添加调试代码确认参数值:

    // 调试用,确认参数是否正确传递
    if(string.IsNullOrEmpty(firstname))
    {
        return BadRequest("缺少firstname参数");
    }
    
  3. 正确赋值到payload
    确保payload的层级结构正确,且参数值不为空:

    // 假设payload已正确初始化issuance和claims层级
    payload["issuance"]["claims"]["given_name"] = firstname;
    
  4. 检查表单提交方式
    若Index页面的表单是POST提交,查询参数不会自动附加到URL,此时需要:

    • 把表单method改为get;
    • 或者将参数绑定特性改为[FromForm],适配POST表单提交:
      public async Task<ActionResult> IssuanceRequest([FromForm(Name = "firstname")] string firstname)
      

额外排查点

  • 确认URL参数名和代码中Name属性的拼写完全一致(区分大小写);
  • 检查given_name是否和Azure门户中配置的凭据声明名称完全匹配;
  • 确保payload的JSON结构符合Microsoft可验证凭据API的要求,避免层级错误。

内容的提问来源于stack exchange,提问作者tomu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 04:06:25