Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从ASP.NET核心WebAPI获取int值?_C#_Asp.net Core_Async Await_Blazor_Blazor Webassembly - Fatal编程技术网

C# 如何从ASP.NET核心WebAPI获取int值?

C# 如何从ASP.NET核心WebAPI获取int值?,c#,asp.net-core,async-await,blazor,blazor-webassembly,C#,Asp.net Core,Async Await,Blazor,Blazor Webassembly,我使用的是ASP.NET Core Blazor WebAssembly、.NET 5.0.1、实体框架Core 5.0.1、Microsoft SQL Server、DevExpress Blazor WebAssembly 20.2.4 At服务器项目(具有Identity Server 4的ASP.NET核心Web API) 使用acc.Server.Models; 使用acc.Server.Data; 使用Microsoft.AspNetCore.Authorization; 使用Mic

我使用的是ASP.NET Core Blazor WebAssembly、.NET 5.0.1、实体框架Core 5.0.1、Microsoft SQL Server、DevExpress Blazor WebAssembly 20.2.4

At服务器项目(具有Identity Server 4的ASP.NET核心Web API)

使用acc.Server.Models;
使用acc.Server.Data;
使用Microsoft.AspNetCore.Authorization;
使用Microsoft.AspNetCore.Mvc;
使用Microsoft.Extensions.Logging;
使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用System.Threading.Tasks;
命名空间acc.Server.Controllers
{
[授权]
[ApiController]
[路线(“[控制器]”)]
公共类OrganizationUnitController:ControllerBase
{
私有只读ApplicationDbContext数据库;
专用只读ILogger\u记录器;
公共组织单元控制器(ILogger记录器、ApplicationDbContext\u db)
{
_记录器=记录器;
db=_db;
}
// https://localhost:5001/OrganizationUnit
[HttpGet]
公共IEnumerable Get()
{
尝试
{
返回db.OrganizationUnits.ToList();
}
接住
{
投
}
}
//职位:https://localhost:5001/OrganizationUnit
[HttpPost]
公共异步任务

但是(1)处的源代码是语法错误。如何修复它?

您可以更改:

int orgUnitParentGrade = await Http.GetFromJsonAsync<int>(endPoint);
int-orgUnitParentGrade=wait Http.GetFromJsonAsync(端点);
致:

var response=wait Http.GetAsync(端点);
if(响应。IsSuccessStatusCode)
{
var data=await response.Content.ReadAsStringAsync();
var orgUnitParentGrade=JsonConvert.DeserializeObject(数据);
}
其他的

我认为真正的问题是方法
void onrowupdateing(…)
没有标记为异步

这就是为什么您提出的解决方案能够工作的原因-通过强制异步结果看起来像是同步的(这就是
.result
所做的)。但一般来说,您不应该这样“修复”此类问题-通过这种方式,您可以混合异步和同步代码。这是一种非常流行的方法(第4部分)

更好的解决方案是使您的方法
onrowupdateing
异步,同时保持其内部的一切与最初一样:

异步任务在行更新(…)
{
...
int orgUnitParentGrade=await Http.GetFromJsonAsync(端点);
...
}

upd.在再次查看您的代码后,我认为您应该仔细检查
OnRegionChanged
OnRowInserting
onrowupdate
OnRowRemoving
,每一项检查两件事:

  • 它们本质上是异步的,但每个都有同步签名。因此,您应该像我对
    onrowupdate
    所做的那样使它们异步

  • 它们包含异步方法的调用,如
    Http.DeleteAsync
    InvokeAsync
    等,而不等待它们的结果。您确定这是有意的吗?如果不是,等待应该等待的


  • 您还可以查看的文档,以加深对它的理解。

    我想指出您的问题中的一些问题(我认为这将解释投票结果).1)对于其他人来说,使用一小段代码更好。你的问题很长,而且似乎没有必要。例如,后端代码是多余的。2)文本而不是文本/代码的屏幕截图被普遍认为更为用户友好。希望这对你有所帮助!
    string endPoint = "OrganizationUnit/GetGradeOfOrganizationUnit/" + organizationUnit.ParentId;
    int orgUnitParentGrade = await Http.GetFromJsonAsync<int>(endPoint);
    
    int orgUnitParentGrade = await Http.GetFromJsonAsync<int>(endPoint);
    
    var response = await Http.GetAsync(endPoint);
    if (response.IsSuccessStatusCode)
                {
                    var data = await response.Content.ReadAsStringAsync();
                    var orgUnitParentGrade = JsonConvert.DeserializeObject<int>(data);
                }
    else....