标签: webapi

使用 Web Api、C# 的 Web 应用程序中的 Newtonsoft.Json 6.0.0.0 和 12.0.0.0 冲突

我在 Visual Studio 2019 中启动了一个新的 Web 应用程序。我添加了一个 Web Api。不久之后或同时(不记得了),我开始收到这样的警告:

Warning     No way to resolve conflict between "Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" and "Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed". Choosing "Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" arbitrarily.
Run Code Online (Sandbox Code Playgroud)

我注意到但没有做任何事情,因为我决定等到它给我带来问题。

而现在...

我将要使用一个 JSon 对象,但是在写这个的时候:

JObject jObject = JObject.Parse(result);
Run Code Online (Sandbox Code Playgroud)

编译器给了我这个错误:

Error   CS0433  The type 'JObject' exists in both 'Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' and 'Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'
Run Code Online (Sandbox Code Playgroud)

我在网上搜索了一下,得出的结论如下:

  • 看起来它是Microsoft.AspNet.WebApi.Client是唯一安装的包,它依赖于 Newtonsoft.Json (>= 6.0.4)
  • 我已经安装了 Newtonsoft.Json (12.0.3)
  • 在解决方案资源管理器中。在参考列表中,我只有 1 个参考。这是 12.0.3 的那个。
  • 在 Web.Config 中,我有这个条目(并且只有 Newtonsoft.Json 的这个条目)。
    • <dependentAssembly><assemblyIdentity name="Newtonsoft.Json" …

c# json.net visual-studio-2019 webapi

2
推荐指数
1
解决办法
1892
查看次数

使用 Http.GetJsonAsync 发送参数

我在 Blazor 应用程序中有以下代码,它调用 API 并根据用户 ID 参数检索项目列表。

Http.GetJsonAsync 似乎不允许我输入参数。如何指定 userid 变量作为参数?

调用 API

protected override async Task OnInitializedAsync()
{
    userid = await localStorage.GetItemAsync<string>("userid");

    myTrades = await Http.GetJsonAsync<ItemForTrade[]>("api/Trading/GetTradesForUser");        
}
Run Code Online (Sandbox Code Playgroud)

API 代码

[Authorize]
[HttpGet("[action]")]
public async Task<List<ItemForTrade>> GetTradesForUser(string userid)
{
    return await tradingService.GetTradesForUser(userid);
}
Run Code Online (Sandbox Code Playgroud)

json blazor webapi

1
推荐指数
1
解决办法
1388
查看次数

如何从 Power BI 中的服务检索不记名令牌?

我正在尝试调用 Web API——例如,https://myresources/getresources. 此调用需要 API 密钥、resourcesApiKey 和不记名令牌。令牌必须从另一个服务 获取https://mytokenservice/jwt。它需要一个 API 密钥 tokenServiceApiKey。

我可以通过手动访问令牌服务并输入值来获取资源数据,但我希望 Power BI 为我处理这一切。我在这里读到了一些关于此的内容,但这似乎适用于静态令牌。我们的改变了,所以我需要实际调用这项服务。

所以,我想做的是:

  1. 使用我的报告保存令牌服务 URL 和 API 密钥。运行报表时,Power BI 应使用 URL 和密钥来检索不记名令牌。
  2. 使用我的报告保存资源 API URL 和 API 密钥。将步骤 1 中检索到的不记名令牌以及资源 API 密钥应用于对资源 API url 进行的调用,以检索我真正需要的数据。

我认为这里描述的方法适用,但我无法让它发挥作用。以下是我最近使用 Power BI 高级编辑器尝试的操作:

  • 我使用管理参数在 Power BI 中创建了一个参数,然后使用高级编辑器,输入了以下内容:

    Web.Content(" https://mytokenservice/jwt", [ ApiKeyName="tokenServiceApiKey" ] )

我还为 tokenServiceApiKey 和 resourcesApiKey 创建了 Power BI 参数,其中包含每个参数的密钥。

不过,当我在高级编辑器中单击“完成”时,它会自动围绕我编写的内容生成一些代码,因此现在显示为:

Html.Table(Web.Content("https://mytokenservice/jwt",[ApiKeyName="tokenServiceApiKey"]), {})
Run Code Online (Sandbox Code Playgroud)

编辑器中出现的是一个不包含数据的表格图标。我应该拿回一根绳子。我不知道从这里该去哪里,并且在网上寻找答案时遇到困难。

有什么办法可以实现我所追求的目标吗?

我可能没有很好地解释它,所以如果您需要更多信息或澄清,请提问。

powerbi powerbi-desktop webapi

1
推荐指数
1
解决办法
1万
查看次数

在具有分割字符串实体的 LINQ 表达式中,“表达式树可能不包含使用可选参数的调用或调用”?

var list1 = _context.Employees.Where(x=> x.EmployeeId.Equals(empId)
                    && **x.deptIds.Split(",")**.ToList().Any(p => (p!=(deptId.ToString()))));
Run Code Online (Sandbox Code Playgroud)

其中,x.deptIds 是以逗号分隔的字符串形式存储的部门 ID。出现错误“表达式树可能不包含使用可选参数的调用或调用”。怎么解决呢?

c# linq entity-framework .net-core webapi

1
推荐指数
1
解决办法
9056
查看次数

C# webAPI 无法从主体将原始整数值绑定到模型?

我的问题是,当我将有效负载正文中以零 (012345) 开头的任何整数值发送到 C# web API 时,接收到的值没有第一位数字 (12345)。它忽略了零。如何强制 API 接收原始数据?

[HttpPost]
    public void insertdata([FromBody]Model model)
    {
     // model.id=1234    
    }
Run Code Online (Sandbox Code Playgroud)

有效载荷

{id:01234}
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc webapi

1
推荐指数
1
解决办法
62
查看次数

使用 NodaTime LocalDate 调用 Web api POST (abp appservice) 无法序列化

我正在尝试使用abp.io编写一个 Web api并实现NodaTime。每当我尝试调用 POST 操作时,我都会得到

验证期间检测到以下错误。\r\n - JSON 值无法转换为 NodaTime.LocalDate。

我已经在模块中正确配置了 NodaTime,我还在传统的 .net 5 Web api 中对其进行了测试,并且工作正常。

这是我的配置:

private void ConfigureNodaSerialization()
    {
        Configure<JsonSerializer>(options =>
        {
            options.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb);
            //options.Converters.Add(NodaConverters.LocalDateConverter);
        });
    }
Run Code Online (Sandbox Code Playgroud)

我正在使用 NodaTime.Serialization.JsonNet

我也尝试过 NodaTime.Serialization.SystemTextJson 无济于事,结果相同。

..这是应用程序服务:

[AllowAnonymous]
public class NodaTestAppService : TestAppService, INodaTestAppService
{
    public Task PostNodaTest([FromBody]NodaTestDto dto)
    {
        return Task.CompletedTask;
    }

    public Task GetNodaTest(NodaTestDto dto)
    {
        return Task.CompletedTask;
    }
}
Run Code Online (Sandbox Code Playgroud)

GET 工作正常,问题出在 POST 上。

这是 dto:

public class NodaTestDto
{
    public LocalDate Date { get; set; } …
Run Code Online (Sandbox Code Playgroud)

.net c# nodatime abp webapi

1
推荐指数
1
解决办法
532
查看次数

如何将 JsonElement 转换为 Int 或其他原始类型

我在 .net 6.0 上有 c# webapi。我正在将 postdata 从客户端获取到 param_class 到 _input 中。该类如下:

public class param_class
{
    public string? name { get; set; }
    public object? value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

客户端以 json 字符串形式发送数据,如下所示:

{
    "name": "lotnum",
    "value": 143
}
Run Code Online (Sandbox Code Playgroud)

在 webapi 中,当我获取值字段时,会抛出错误 JsonElement 无法转换为 Int。

var v = (int)_input.value;
Run Code Online (Sandbox Code Playgroud)

如何在.net 6.0的webapi中将JsonElement转换为其他类型?

c# json jsonconvert webapi .net-6.0

1
推荐指数
1
解决办法
3408
查看次数

如何使用客户消息处理错误请求 Web api 核心?

我有类似的问题。\n是否有更简单的方法来处理输入数据类型错误?

\n\n

https://coderethinked.com/customizing-automatic-http-400-error-response-in-asp-net-core-web-apis/

\n\n

我搜索但没有找到答案。

\n\n

更新:

\n\n

我从微软的例子中找到了一个解决方案:\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0

\n\n
 return BadRequest (new {message = "Something went wrong"});\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是\n当字段为[必填]时模型时,在运行服务之前会调用错误 400。有没有办法解决句柄模型的 400 错误?

\n

asp.net-core-webapi webapi

0
推荐指数
1
解决办法
2418
查看次数

请求匹配 .NET Core 上的多个端点

我在 .NET Core 项目中使用 OpenAPI (Swagger),当使用多个具有类似获取请求的方法时,我遇到“Microsoft.AspNetCore.Routing.Matching.AmbiguousMatchException:请求匹配多个端点”。运行时出错。我查看了 web 和 SO 上的几个页面,并尝试应用诸如请求匹配多个端点之类的解决方法,但为什么呢?,但这并不能解决问题。以下是我使用的 API 方法和路由定义。

[Route("get", Name="get")]
public IEnumerable<DemoDto> Get()
{
    //
}

[Route("get/{id}", Name="getById")]
public DemoDto GetById(int id)
{
    //
}

[Route("get/{query}", Name="getWithPagination")]
public IEnumerable<DemoDto> GetWithPagination(DemoQuery query)
{
    //
}
Run Code Online (Sandbox Code Playgroud)

我使用Name财产来解决问题但没有解决。有什么想法可以改变路线以区分Get()GetWithPagination()吗?

c# api rest .net-core webapi

0
推荐指数
2
解决办法
2851
查看次数

为什么我们需要异步任务,默认 Web API 请求将仅通过创建或重用现有线程来运行

为什么我们在 WebApi c# 中需要异步任务,无论如何,默认的 Web API 请求将仅通过创建或重用现有线程来运行。那么线程已经被使用了?

c# task async-await webapi

-3
推荐指数
1
解决办法
1994
查看次数