我在将一些 API 调用包装在不同的 NuGet 包中时遇到了问题。
由于我最近发现的包,API 返回的所有错误都使用ProblemDetails/ValidationProblemDetails类Hellang.Middleware.ProblemDetails。
现在的问题是:将 API 包装器 NuGet 包添加到我的客户端应用程序时,我不想将反序列化任务留给response.Content它们(调用成功与否)。
这将主要产生 3 种响应类型:
Success=>Expected常规对象,可以针对 API 公开的每个方法进行更改BadRequest => ValidationProblemDetailsProblemDetails我在包装器中处理反序列化的主要问题是ProblemDetails/ValidationProblemDetails类“深深地”植根于Microsoft.AspNet.Mvc.Core命名空间,因此在相应的 NuGet 包中(我知道没有抽象)。
在我看来,将这样的包包含为对简单 API 包装器的直接依赖似乎有些过分(但我这样想可能是错误的,请随时纠正我)。
不幸的是,根据https://github.com/dotnet/aspnetcore/issues/7679,情况不会很快改变。
我曾想过制作我自己的 NuGet 包,包括这些类,并将其作为分布在我所有包装器中的依赖项,但我不太喜欢这个解决方案。
如果有人有更好的想法或解决方案来处理这个问题(ProblemDetails直接从 API 包装器返回一个合适的对象),他们非常受欢迎。
我正在尝试使用HttpClient/HttpContent通过网络上传数据但是我似乎找不到以这种方式发送文件的正确方法.
这是我目前的代码:
private async Task<APIResponse> MakePostRequest(string RequestUrl, string Content)
{
HttpClient httpClient = new HttpClient();
HttpContent httpContent = new StringContent(Content);
APIResponse serverReply = new APIResponse();
httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
try {
Console.WriteLine("Sending Request: " + RequestUrl + Content);
HttpResponseMessage response = await httpClient.PostAsync(RequestUrl, httpContent).ConfigureAwait(false);
}
catch (HttpRequestException hre)
{
Console.WriteLine("hre.Message");
}
return (serverReply);
}
Run Code Online (Sandbox Code Playgroud)
内容是该形式的字符串:paramname = value¶m2name = value¶m3name = value ..点是我必须实际发送一个文件(照片).
它似乎适用于每个参数但文件本身(我必须在post请求中发送两个验证密钥,并且它们被识别)
我按照这种方式将图片作为字符串进行检索,这可能是它失败的主要原因之一?:/
byte[] PictureData = File.ReadAllBytes(good_path);
string encoded = Convert.ToBase64String(PictureData);
Run Code Online (Sandbox Code Playgroud)
我做错了吗?是否有另一种更好的方法来创建正确的POST请求(它必须是异步并支持文件上传)
谢谢.
我有一个带有TabItem元素的IsMouveOver触发器的问题.
当鼠标光标位于TabItem上时,其背景颜色会发生变化,这就是我想要的=>它的工作原理.但是,只要我的鼠标光标位于TabItem内的项目上,TabItem的背景颜色也会发生变化.
这是与样式相关的XAML:
<Style x:Key="SupTest" TargetType="{x:Type TabItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabItem}">
<Border Margin="2" Name="TabBorder" CornerRadius="6" BorderBrush="Transparent" Background="Transparent"
BorderThickness="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<StackPanel Margin="12" Orientation="Horizontal" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Rectangle Width="25" Height="25" Fill="Blue" HorizontalAlignment="Left" Margin="00,0,0,0"></Rectangle>
<ContentPresenter ContentSource="Header" VerticalAlignment="Center"
HorizontalAlignment="Stretch" Margin="10,0,0,0"></ContentPresenter>
</StackPanel>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Panel.ZIndex" Value="100" />
<Setter TargetName="TabBorder" Property="Background" Value="#FFDFDFDF" />
<Setter TargetName="TabBorder" Property="BorderThickness" Value="2" />
<Setter TargetName="TabBorder" Property="BorderBrush" Value="{DynamicResource WindowTitleColorBrush}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="TabBorder" Property="Background" Value="DarkRed" />
<Setter TargetName="TabBorder" Property="BorderBrush" Value="Black" />
<Setter Property="Foreground" Value="DarkGray" …Run Code Online (Sandbox Code Playgroud) c# ×3
.net ×1
api ×1
asynchronous ×1
httpclient ×1
ismouseover ×1
nuget ×1
post ×1
request ×1
triggers ×1
wpf ×1
xaml ×1