Azure可验证凭据.NET示例:如何将Query String绑定到属性?
问题:在Microsoft可验证凭据示例中动态传递表单查询参数失败
我正在使用Microsoft的可验证凭据示例项目,希望替换示例中固定的凭据声明值,改用Index页面表单中输入的查询参数(比如名为firstname的输入框)。目前能在结果页面URL中看到这些参数,但无法正确将其传入凭据发行请求。
我尝试过的方法
- 方法1:直接从请求查询中取值
payload["issuance"]["claims"]["given_name"] = HttpContext.Request.Query["firstname"].ToString(); - 方法2:使用
[FromQuery]绑定属性
先定义类属性:
再赋值到payload:[FromQuery(Name = "firstname")] public string firstname { get; set; }payload["issuance"]["claims"]["given_name"] = firstname;
遇到的错误
两种方法都触发相同错误:
"Missing provided claims in issuance: [given_name]","target":"issuance.claims"
参考信息:当前使用的方法签名是
public async Task<ActionResult> IssuanceRequest()
我对.NET不熟悉,请问正确的实现方式是什么?
正确实现步骤
修正方法签名,添加参数绑定
你当前的方法签名没有参数绑定逻辑,导致[FromQuery]无法生效。需要修改方法签名,直接把查询参数作为方法参数传入:public async Task<ActionResult> IssuanceRequest([FromQuery(Name = "firstname")] string firstname)这样ASP.NET Core会自动从URL查询字符串中提取
firstname参数并绑定到该参数上。先验证参数是否获取成功
可以先添加调试代码确认参数值:// 调试用,确认参数是否正确传递 if(string.IsNullOrEmpty(firstname)) { return BadRequest("缺少firstname参数"); }正确赋值到payload
确保payload的层级结构正确,且参数值不为空:// 假设payload已正确初始化issuance和claims层级 payload["issuance"]["claims"]["given_name"] = firstname;检查表单提交方式
若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
相关产品推荐
相关产品推荐

