【发布时间】:2020-07-17 16:14:19
【问题描述】:
我正在处理 Asp.net 项目。我创建了一个表单,要求输入connectionId 和holderFirstName。 asp-action 的名字是SendProofNameRequest。
在控制器中,我编写了一个方法SendProofNameRequest,它以connectionId 和holderFirstName 作为参数。但问题是,我将holderFirstName 作为输入的目的是在另一个方法(VerifyFirstName)中使用它。
所以,我的问题是如何将holderFirstName 作为用户的输入并在另一种方法/VerifyFirstName(不是SendProofNameRequest)中使用它。
Details.cshtml
<form class="input-group mb-3" asp-controller="Proof" asp-action="SendProofNameRequest">
<input type="hidden" name="connectionId" value="@Model.Connection.Id" />
<input type="text" name="holderFirstName" autocomplete="off" class="form-control" placeholder="Enter First Name" aria-label="First Name" aria-describedby="basic-addon2">
<div class="input-group-append">
<button class="btn btn-outline-info" type="submit">Request a Proof of First Name</button>
</div>
</form>
ProofController.cs
[HttpPost]
public async Task<IActionResult> SendProofNameRequest(string connectionId, out string holderFirstName)
{
var agentContext = await _agentProvider.GetContextAsync();
var connectionRecord = await _walletRecordService.GetAsync<ConnectionRecord>(agentContext.Wallet, connectionId);
var proofNameRequest = await CreateProofNameMessage(connectionRecord);
await _messageService.SendAsync(agentContext.Wallet, proofNameRequest, connectionRecord);
return RedirectToAction("Index");
}
验证名字方法
我想将firstname(静态值)替换为holderFirstName(动态值/用户在表单中输入)
public bool VerifyFirstName(PartialProof proof)
{
var firstName = "Fyodor";
var name = proof.RequestedProof.RevealedAttributes.First();
if (name.Value.Raw.Equals(firstName))
{
return true;
}
return false;
}
更新
正如你所说的添加模型,我做到了...在ViewModel page 中添加模型并在View page 中调用@model..
现在,在验证方法控制器中调用模型中存储的值。
VerifyProof(string proofRecordId) 方法调用另一个方法 VerifyFirstName(proof) 进行实际验证。
请看一下代码,你能指出在哪里添加model.HolderFirstName 和SendNameRequestViewModel model 在哪个方法中,例如VerifyProof(string proofRecordId), VerifyFirstName(proof).. 我遇到了错误..
[HttpGet]
public async Task<IActionResult> VerifyProof(string proofRecordId, SendNameRequestViewModel model)
{
var agentContext = await _agentProvider.GetContextAsync();
var proofRecord = await _proofService.GetAsync(agentContext, proofRecordId);
var request = JsonConvert.DeserializeObject<ProofRequest>(proofRecord.RequestJson);
var proof = JsonConvert.DeserializeObject<PartialProof>(proofRecord.ProofJson);
bool verified = false;
switch (request.Name)
{
case "ProveYourFirstName":
verified = VerifyFirstName(proof, model.HolderFirstName); break;
default:
break;
}
if (!verified)
{
proofRecord.State = ProofState.Rejected;
await _walletRecordService.UpdateAsync(agentContext.Wallet, proofRecord);
}
return RedirectToAction("Index");
}
public bool VerifyFirstName(PartialProof proof, SendNameRequestViewModel model.HolderFirstName)
{
var firstName = model.HolderFirstName;
var name = proof.RequestedProof.RevealedAttributes.First();
if (name.Value.Raw.Equals(firstName))
{
return true;
}
return false;
}
【问题讨论】:
-
欢迎来到 StackOverflow。如果我理解正确,您对函数的工作方式有疑问。只需将名字作为参数从您的 SendProof 方法传递给您的验证方法。您可能需要创建第二个验证方法,因为我不确定 PartialProof 类型是什么。
-
不行,asp-action是
SendProofNameRequest,方法名也应该是SendProofNameRequest
标签: c# asp.net .net asp.net-mvc asp.net-core